这是语法错误还是编译器错误


#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char charName[] = "John";
int charAge[] = 35;
printf("There once was a man named %sn", charName);
printf("He was %sn", charAge); 
return 0;
}

第一个错误:数组初始值设定项必须是初始值设定值列表或宽字符串文字int charAge[] = 35;第二个错误:make:***[<内置>:main.o]错误1退出状态2

我尽了我所能来解决这个问题,但没有任何效果。

错误来自以下事实:您声明了一个整数数组int charAge[],但您没有为其分配数组,而是为其分配了一个单独的值35

根据您的使用情况,您不需要阵列。所以,你可以直接做

int charAge = 35;

此外,当您打印charAge时,您需要使用%i(或%d;这对于整数也是可以接受的(而不是%s。CCD_ 8用于类似于CCD_ 10的CCD_ 9阵列。也就是说,你应该做

printf("He was %in", charAge);

如果这是编译器的错误,那么它已经被解决了。

如果你声明了一个数组,那么初始化器必须是一个像一样的支撑列表

int charAge[] = { 35 }; 

唯一的例外是使用字符串文字(如(初始化字符数组

char charName[] = "John";

也可以像一样重写

char charName[] = { "John" };

来自C标准(6.7.9初始化(

14字符类型的数组可以由字符串初始化literal或UTF−8字符串literal,可选地用大括号括起来字符串文字的连续字节(包括终止的null字符(如果有空间或数组大小未知(初始化数组的元素。

15元素类型与限定或兼容的数组wchar_t的非限定版本可以由宽字符串初始化文字,可选地用大括号括起来。的连续宽字符宽字符串文字(包括终止的null宽字符如果有空间或阵列大小未知(初始化数组的元素。

16否则,具有聚合或并集类型的对象的初始值设定项应为元素或命名成员

注意printf的这次调用

printf("He was %sn", charAge);

调用未定义的行为。

考虑到数组的名称,您似乎要用类似的元素类型char来声明它

char charAge[] = "35";

否则你需要写

printf("He was %dn", *charAge);

通常,整型数组的元素(包含字符串的数组除外(应该在循环中逐元素输出。

尽管在这个具体的例子中,声明一个数组是没有意义的。您可以只声明一个标量对象

int charAge = 35;

在这种情况下,呼叫或printf将看起来像

printf("He was %dn", charAge);

最新更新