代码在c中给出意外输出

时间:2012-05-04 19:14:11

标签: c

以下代码段在Turbo C ++编译器中提供了意外输出:

     char a[]={'a','b','c'};
     printf("%s",a);

为什么不打印abc?根据我的理解,字符串在C中实现为一维字符数组 其次,%s%2s之间有什么区别?

5 个答案:

答案 0 :(得分:5)

这是因为你的字符串不是以零结尾的。这将有效:

char a[]={'a','b','c', '\0'};

%2s指定打印输出的最小宽度。由于您要打印3个字符的字符串,因此将被忽略。但是,如果您使用%5s,则您的字符串将在左侧填充两个空格。

答案 1 :(得分:3)

char a[]={'a','b','c'};

一个问题是字符串需要以空值终止:

char a[]={'a','b','c', 0};

答案 2 :(得分:2)

如果不更改原始字符数组,您也可以使用

     char a[]={'a','b','c'};
     printf("%.3s",a);
or
     char a[]={'a','b','c'};
     printf("%.*s",sizeof(a),a);
or
     char a[]={'a','b','c'};
     fwrite(a,3,1,stdout);
or
     char a[]={'a','b','c'};
     fwrite(a,sizeof(a),1,stdout);

答案 3 :(得分:1)

因为您没有使用字符串。要被视为字符串,您需要'空终止':'\ 0'或0(是的,没有引号)。

您可以通过两种形式的初始化来实现这一目标:

char a[] = {'a', 'b', 'c', '\0'};

或使用您身边的编译器:

char a[] = "abc";

答案 4 :(得分:0)

每当我们在c编程中存储一个字符串时,我们总是在末尾有一个额外的字符来标识字符串的结尾。

使用的额外字符是null字符'\0'。 在上面的程序中,你缺少空字符。

您可以将字符串定义为

char a[] = "abc";

获得所需的结果。