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