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

我收到错误:与revS. 我究竟做错了什么?

4

6 回答 6

34

您不能revS以这种方式进行初始化,您需要在=. 来自C11 6.7.9 Initialization /14, /16

14/ 字符类型的数组可以由字符串文字或 UTF-8 字符串文字初始化,可选用大括号括起来。

字符串文字的连续字节(如果有空间或数组大小未知,则包括终止的空字符)初始化数组的元素。

: : :

16/否则,具有聚合或联合类型的对象的初始化程序应是元素或命名成员的初始化程序的大括号括起来的列表。


要获得相同的结果,您可以将代码替换为:

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

这不是技术上的初始化,而是实现了相同的功能结果。如果你真的想要初始化,你可以使用类似的东西:

#define HWSTR "Hello, world!"
int main (void) {
    char testStr[50] = HWSTR;
    char revS[50] = HWSTR;
    // more code here
}
于 2012-06-15T00:55:21.000 回答
9

数组不可分配。

您应该使用 memcpy 将内容从复制testStrrevS

memcpy(revS,testStr,50);
于 2012-06-15T00:55:40.397 回答
4

只能使用常量表达式来初始化数组,就像在testStr.

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

于 2012-06-15T00:55:46.677 回答
3

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

于 2012-06-15T00:55:03.030 回答
2

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

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; // or &textStr[5]
    printf("%s\n", revS);
}
于 2013-12-31T03:17:46.717 回答
0

你在做

char revS[50] = testStr; 

这是错误的,因为您不能分配char *char.

试试revS = testStr;应该可以。

于 2012-06-15T05:51:56.400 回答