2012-01-04 3 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' 전에는 free를 호출 할 수 없습니다. – cnicutar

+0

무료 (newobj.name)로 작성해야 할 것 같습니까? – pr1m3x

관련 문제