2013-02-08 3 views
0
struct group { 
    char *name; 
    struct user *users; 
    struct xct *xcts; 
    struct group *next; 
}; 

int add_group(Group **group_list_ptr, const char *group_name) { 
printf("%p\n",group_list_ptr); 
*group_list_ptr = malloc(sizeof(struct group)); 

printf("%p\n",*group_list_ptr); 
printf("%p\n",(*group_list_ptr)->name); 
(*group_list_ptr)->name = malloc(sizeof(*group_name)); 
printf("%p\n",(*group_list_ptr)->name); 
strncpy((*group_list_ptr)->(*name), "hello", strlen(*group_name)); 
//printf("%s\n",(*group_list_ptr)->name); 
return 0; 

}присвоить значение указателю char?

как я могу присвоить значение * имя. После того, как я выделил память для структуры, я выделил память для имени

strncpy((*group_list_ptr)->(*name), "hello", strlen(*group_name)); 

Я проверяю его с «привет», но я хочу, чтобы скопировать константный символ * GROUP_NAME.

Я получаю ошибку

lists.c:24:32: error: expected identifier before ‘(’ token 
lists.c:24:32: error: too few arguments to function ‘strncpy’ 
+0

my bad strncpy ((* group_list_ptr) -> (* name), "hello", sizeof (* group_name)); – RandomGuy

ответ

1
strncpy((*group_list_ptr)->name, "hello", strlen("hello")); 

Вы не хотите разыменовать Имя пользователя, который является ошибкой компилятора.

Вы также не можете использовать sizeof для получения длины строки. Используйте strlen().

Для параметра strcpy() последний параметр - длина строки, которую вы копируете. Убедитесь, что он меньше, чем буфер назначения!

+0

Извините, была опечатка У struct есть char * name; strncpy ((* group_list_ptr) -> (* name), "hello", strlen (* group_name)); , но тип данных в структуре является char * name. (* group_list_ptr) -> имя, так зачем это работать? – RandomGuy

+0

Хорошо, но вы все еще копируете «привет» и strlen'ing * group_name. Это тоже нужно очистить. – PQuinn

+0

Параметр name в group_list_ptr является символом char *, который вы хотите передать strncpy. Вот почему (* group_list_ptr) -> name работает. – PQuinn

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