Тип 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()
в качестве усечение строки копии:
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, "};
Благодарим за помощь. Принятие этого ответа, потому что это был самый быстрый и непростой выбор между другими. – Mike 2010-12-06 03:20:32