2

以下代码片段在 Turbo C++ 编译器中给出了意外的输出:

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

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

4

5 回答 5

5

这是因为您的字符串不是以零结尾的。这将起作用:

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

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

于 2012-05-04T19:15:39.657 回答
3
char a[]={'a','b','c'};

一个问题是字符串需要以空值结尾:

char a[]={'a','b','c', 0};
于 2012-05-04T19:15:43.297 回答
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);
于 2012-05-04T21:14:23.890 回答
1

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

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

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

或使用您身边的编译器:

char a[] = "abc";
于 2012-05-04T19:20:23.210 回答
0

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

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

您可以将您的字符串定义为

char a[] = "abc";

得到想要的结果。

于 2016-08-01T11:36:23.730 回答