Тип sut.field[0]
действительно char [MAX_CHARS+1]
. Однако большинство других ответов имеют тип "Name, "
неправильно - на самом деле это тип char [7]
(используйте sizeof "Name, "
для простой демонстрации этого).
Тем не менее, вы по-прежнему не можете напрямую присвоить char [7]
char [MAX_CHARS+1]
. Вы даже не можете напрямую назначить char [7]
другому char [7]
(в этом случае инициализация обрабатывается иначе, чем назначение).
Ответ, вероятно, заключается в том, чтобы просто использовать функцию копирования - например, если вы уверены, что MAX_CHARS >= 6
, вы можете просто использовать strcpy()
. Если вы не можете быть уверены в правильности длины, вы можете использовать strncat()
as в качестве усеченной копии строки:
sut.field[0][0] = '\0';
strncat(sut.field[0], "Name, ", MAX_CHARS);
(Обратите внимание, что, несмотря на название, strncpy()
не для этого подходит и на самом деле очень редко вообще является желаемой функцией).
Однако стоит отметить, что вы можете косвенно назначать массивы (одного и того же типа), если они заключены в struct
. Это означает, что следующее будет работать (если у вас есть компилятор C99):
typedef struct { char s[MAX_CHARS+1] } f_string; /* string for each field */
csv_line sut;
sut.field[0] = (f_string){"Name, "};
person
caf
schedule
06.12.2010