2015-04-11 2 views
0

Я начинаю изучать C, и у меня уже есть несколько проблем. Я хочу проанализировать файл и сохранить результаты каждой строки в структуре. Моя структура выглядит следующим образом:Назначение указателя char для массива char в C

struct record { 
    char x[100]; 
} 

Тогда всякий раз, когда я использую strtok разобрать строку в некоторых file.txt,

struct record R; 
... 
char *token; 
token = strtok(line, "\t"); 

маркер возвращает указатель на строку, и всякий раз, когда я печатаю это, это является правильной строкой. Я хочу назначить токен x, например R.x = token, но я получаю сообщение об ошибке: «char x [100] не может быть назначен». Можно ли преобразовать этот токен указателя в реальный массив символов или что было бы лучшим способом сохранить результаты в структуре?

+0

Вы не можете назначить такие массивы. Используйте 'memcpy()', чтобы заполнить его данными, которые вы хотите, чтобы они содержались. – Bregalad

ответ

4

Ошибка говорит все. Массивы не назначаются. Вам нужно скопировать каждый символ по одному, а затем добавить конец NUL-терминатора в конце.

К счастью, есть функция, которая делает это за вас. Имя функции: strcpy, и оно находится в заголовке string.h.

Чтобы устранить проблему, используйте

strcpy(R.x,token); 

вместо

R.x = token; 
+0

Отлично, это сработало! – Sam

0

Использование strcpy, убедившись, что строка помещается в массив:

#define LEN(array) (sizeof (array)/sizeof (array)[0]) 

if (strlen(token) < LEN(R.x)) { 
    strcpy(R.x, token); 
} else { 
    fprintf(stderr, "error: input string \"%s\" is longer than maximum %d\n", token, LEN(R.x) - 1); 
} 
0

strcpy останавливается, когда встречает NULL, memcpy нет. Итак, если у вас массив 0x00 например. \0 в середине, вы должны использовать memcpy, а не strcpy.

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