int main(void) {
char testStr[50] = "Hello, world!";
char revS[50] = testStr;
}
Я получаю ошибку: "invalid initializer" в строке с revS
. Что я делаю неправильно?
int main(void) {
char testStr[50] = "Hello, world!";
char revS[50] = testStr;
}
Я получаю ошибку: "invalid initializer" в строке с revS
. Что я делаю неправильно?
Поскольку вы не можете инициализировать подобное, вам нужно постоянное выражение в качестве значения инициализации. Замените его на:
int main (void) {
char testStr[50] = "Hello, world!";
char revS[50]; strcpy (revS, testStr);
:
}
Или, если вы действительно хотите инициализировать, вы можете использовать что-то вроде:
#define HWSTR "Hello, world!"
int main (void) {
char testStr[50] = HWSTR;
char revS[50] = HWSTR;
:
}
Это обеспечивает постоянное выражение с минимальным дублированием в вашем источнике.
Массивы arent присваиваются.
Вы должны использовать memcpy для копирования содержимого от testStr
до revS
memcpy(revS,testStr,50);
Для инициализации массивов могут использоваться только константные выражения, как при инициализации testStr
.
Вы пытаетесь инициализировать revS
другой переменной массива, которая является не константным выражением. Если вы хотите скопировать содержимое первой строки во вторую, вам нужно будет использовать strcpy
.
Инициализатор для char[]
должен быть либо литеральной строкой, либо чем-то вроде {1,2,3,4}
. Нельзя назвать имя другой переменной.
Вы делаете
char revS[50] = testStr;
что неверно, поскольку вы не можете назначить char *
char
.
Попробуйте revS = testStr;
, он должен работать.
Если вы планируете манипулировать вторым массивом, вы также можете использовать указатель:
int main(void){
char textStr[50] = "hello worlds!";
char *revS = textStr;
printf("%s\n", revS);
}
Если вы хотите действительно сумасшедший, вы можете указать на конкретное место в массиве с помощью оператора ссылки:
int main(void){
char textStr[50] = "hello worlds!";
char *revS = &textStr[5];
printf("%s\n", revS);
}