Я сейчас немного играю с C и пытаюсь понять строки. Может кто-нибудь объяснить, почему это работает:
char test[] = "test";
А почему следующее нет?
char test[255]; test = "test";
Поскольку это инициализация :
и это назначение :
test = "test";
и вы не можете назначать массивы в C (а строки в C - просто массивы).
Лучше всего скопировать строку, используя strcpy() (или, если быть точным, strncpy()).
strcpy()
strncpy()
C не позволяет назначать значения всему массиву, кроме случаев, когда он инициализирован.
Правильный способ скопировать строку в существующий массив: strcpy:
strcpy
char test[255]; strcpy(test,"test");
Вы не можете назначить массив напрямую, потому что это неизменяемое значение lvalue.Но вы можете использовать косвенное назначение, например:
typedef struct { char s[100]; } String; int main() { char a[100] = "before"; assert( sizeof a >= sizeof(String) ); puts( a ); *(String*)a = *(String*) "after"; puts( a ); return 0; }
К сожалению, C не поддерживает прямое присвоение строки (поскольку в нем задействовано более 1 адреса памяти).Вы должны использовать функции strcpy или memcpy.
ну да
test[0]='t' works (since your accessing one memory location at the time)
Поскольку "test" - это указатель , а test - это массив .Вы всегда можете использовать strcpy ().
, хотя то, что вы говорите, выглядит очевидным, это неверно. Вы не можете напрямую присвоить строку символьному массиву. Вы можете попробовать использовать функцию strcpy ().