Я получаю "Invalid Initializer", что я делаю неправильно? - программирование
Подтвердить что ты не робот

Я получаю "Invalid Initializer", что я делаю неправильно?

int main(void) {
    char testStr[50] = "Hello, world!";
    char revS[50] = testStr;
}

Я получаю ошибку: "invalid initializer" в строке с revS. Что я делаю неправильно?

4b9b3361

Ответ 1

Поскольку вы не можете инициализировать подобное, вам нужно постоянное выражение в качестве значения инициализации. Замените его на:

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;
    :
}

Это обеспечивает постоянное выражение с минимальным дублированием в вашем источнике.

Ответ 2

Массивы arent присваиваются.

Вы должны использовать memcpy для копирования содержимого от testStr до revS

memcpy(revS,testStr,50);

Ответ 3

Для инициализации массивов могут использоваться только константные выражения, как при инициализации testStr.

Вы пытаетесь инициализировать revS другой переменной массива, которая является не константным выражением. Если вы хотите скопировать содержимое первой строки во вторую, вам нужно будет использовать strcpy.

Ответ 4

Инициализатор для char[] должен быть либо литеральной строкой, либо чем-то вроде {1,2,3,4}. Нельзя назвать имя другой переменной.

Ответ 5

Вы делаете

char revS[50] = testStr; 

что неверно, поскольку вы не можете назначить char * char.

Попробуйте revS = testStr;, он должен работать.

Ответ 6

Если вы планируете манипулировать вторым массивом, вы также можете использовать указатель:

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);
}