2012-01-04 6 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

Смежные вопросы