2012-01-04 19 views
0

構造体メンバにテキストを渡す際に問題があります。 は、ここに私のコード文字列を別の文字列にコピー

#include <stdio.h> 
#include <string.h> 


typedef struct { 
    char *name; 
    int rank; 
    int weapons; 

}player; 

player create_player(char name[], int rank, int weapons); 
void display_player(player data); 

int main (int argc, const char * argv[]) 
{ 
    player tmp = create_player("First", 3, 3); 
    display_player(tmp); 
} 

player create_player(char name[], int rank, int weapons) 
{ 
    player newobj; 
    char *tmp = malloc(strlen(name) + 1); 

    strcpy(newobj.name, tmp); 
    newobj.rank = rank; 
    newobj.weapons = weapons; 
    free(tmp); 
    return newobj; 
} 

void display_player(player data) 
{ 
    printf("Player name %s\n", data.name); 
    printf("Player rang %d\n", data.rank); 
    printf("Player weapons %d", data.weapons); 
} 

であり、ここで出力

Player name 
Player rang 3 
Player weapons 3 

あなたは「プレイヤー名」の結果を見ることができるようです空です。 また、newobj.nameにテキストを割り当てるよりエレガントな方法を教えてください。 私は恋しいですか?

答えて

4

コード内のstrcpyが間違っています(未割り当てのデータを未割り当てのメモリにコピーします)。あなたはおそらくしたい:

newobj.name = malloc(strlen(name) + 1); 
strcpy(newobj.name, name); 

以上簡単に、あなたはstrdupを持っている場合:

newobj.name = strdup(name); 
+0

感謝を。できます。 malloc()を解放する必要がありますか、それとも自動的に解放されますか? – pr1m3x

+0

@ user1089415 **使用を中止した後は、無料にする必要があります**。だから、 'printf'の前に無料で電話することはできません。 – cnicutar

+0

私は自由(newobj.name)を書く必要があると思いますか? – pr1m3x

関連する問題