我得到“无效的初始化程序”,我做错了什么?

时间:2012-06-15 00:53:01

标签: c arrays

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

我收到错误:revS行上的“初始化程序无效”。我做错了什么?

6 个答案:

答案 0 :(得分:24)

因为你无法像这样初始化,所以你需要一个常量表达式作为初始化值。替换为:

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

这提供了一个常量表达式,源中的重复次数最少。

答案 1 :(得分:7)

数组不可分配。

您应该使用memcpy将内容从testStr复制到revS

memcpy(revS,testStr,50);

答案 2 :(得分:4)

只有常量表达式才能用于初始化数组,就像初始化testStr

一样

您正在尝试使用另一个数组变量初始化revS,这是一个常量表达式。如果要将第一个字符串的内容复制到第二个字符串中,则需要使用strcpy

答案 3 :(得分:2)

char[]的初始化程序需要是文字字符串或{1,2,3,4}之类的字符串。它不允许是另一个变量的名称。

答案 4 :(得分:1)

你在做什么

char revS[50] = testStr; 

这是错误的,因为您无法将char *分配给char

尝试revS = testStr;它应该有用。

答案 5 :(得分:0)

除非你打算操纵第二个数组,否则你也可以使用指针:

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