Инициализация массива символов - PullRequest
2 голосов
/ 31 августа 2011

Я сейчас немного играю с C и пытаюсь понять строки. Может кто-нибудь объяснить, почему это работает:

char test[] = "test";

А почему следующее нет?

char test[255];
test = "test";

Ответы [ 6 ]

8 голосов
/ 31 августа 2011

Поскольку это инициализация :

char test[] = "test";

и это назначение :

test = "test";

и вы не можете назначать массивы в C (а строки в C - просто массивы).

Лучше всего скопировать строку, используя strcpy() (или, если быть точным, strncpy()).

5 голосов
/ 31 августа 2011

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

Правильный способ скопировать строку в существующий массив: strcpy:

char test[255];
strcpy(test,"test");
0 голосов
/ 31 августа 2011

Вы не можете назначить массив напрямую, потому что это неизменяемое значение 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;
}
0 голосов
/ 31 августа 2011

К сожалению, C не поддерживает прямое присвоение строки (поскольку в нем задействовано более 1 адреса памяти).Вы должны использовать функции strcpy или memcpy.

ну да

 test[0]='t' works (since your accessing one memory location at the time)
0 голосов
/ 31 августа 2011

Поскольку "test" - это указатель , а test - это массив .Вы всегда можете использовать strcpy ().

0 голосов
/ 31 августа 2011

, хотя то, что вы говорите, выглядит очевидным, это неверно. Вы не можете напрямую присвоить строку символьному массиву. Вы можете попробовать использовать функцию strcpy ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...