Объявление массива с помощью переменной в C ++ - PullRequest
0 голосов
/ 22 августа 2010

Я пишу программу, которая должна вводить текст и изменять отдельные символы.Я делаю это, используя массив символов, например:

char s[] = "test";
s[0] = '1';
cout << s;

(Returns: "1est")

Но если я пытаюсь использовать переменную, например так:

string msg1 = "test";
char s2[] = msg1;
s2[0] = '1';
cout << s1[0]

Я получаю ошибку: error: initializer fails to determine size of 's2'

Почему это происходит?

Ответы [ 4 ]

4 голосов
/ 22 августа 2010

Для массивов в стиле C требуются литеральные значения для инициализации. Зачем вообще использовать массивы в стиле C? Почему бы просто не использовать std :: string ...

string msg1 = "test";
string s2 = msg1;
s2[0] = '1';
cout << s2[0];
2 голосов
/ 22 августа 2010

Пространство для всех переменных выделяется во время компиляции. Вы просите компилятор выделить место для массива символов с именем s2, но не указываете, как долго это сделать.

Способ сделать это - объявить указатель на символ и динамически выделить его:

char *s2;

s2 = malloc(1+msg1.length()); // don't forget to free!!!!
s2 = msg1; // I forget if the string class can implicitly be converted to char*

s2[0] = '1'

...
free(s2);
0 голосов
/ 22 августа 2010

$ 8.5.1 и $ 8.5.2 говорят о правилах, связанных с инициализацией агрегатов.

0 голосов
/ 22 августа 2010

Я думаю, что char a [] не может быть инициализирован строкой.Редактировать: «строка» на самом деле является строкой типа c (массив символов с '\ 0' в конце).

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