存在整数时C中字符数组的行为

时间:2012-10-28 13:54:01

标签: c arrays char

我无法获得此程序的输出意味着该程序如何运行?有人可以帮助我吗?

#include<stdio.h>

int main(){
char c[]={'1','2','3',0,'1','2','3'};
printf(c); //gives 123 as output
char d[]={'1','0','3',0,'1','2','3'};
printf(d); //gives 103 as output
return 0;
}

这将输出作为字符串输出我在0之前插入的所有字符。
我还想解释为什么printf在0之前打印所有字符?

2 个答案:

答案 0 :(得分:4)

您的阵列中间有一个0printf将打印到0数组中的第一个char。此外,单引号中不能包含多个字符。单引号定义字符而不是字符串。最后,您应该使用char结束0数组。

试试这个:

char c[]={'1','4','3','3','0','1','2','3',0};

请注意,中间的0附近有引号使其成为一个字符,并且在最终0周围有没有引号来结束字符串。

答案 1 :(得分:2)

据我所知,0等于(通常)为NULL,printf打印到它找到的第一个NULL终止符。

在你的情况下

char c[]={'1','2','3',0,'1','2','3'};
printf(c);
char d[]={'1','0','3',0,'1','2','3'};
printf(d);

当打印cd printf打印到遇到NULL的第一个0时。但是当你放'0'时,它会将其视为字符0而非终结符。