要打印s[10]
作为字符(%c
),以及s[10]
数值是0
,它代表了字符\0
,这意味着字符串的结束,并且没有文本表示。出于这个原因,你没有看到任何东西。
如果你想看到的数值,而不是字符值,使用%d
打印它作为一个小数(整数)数量:
printf("%d\n", s[10]);
注意字符串的结尾是不一样的结束正如你的评论之一所述。字符串结尾意味着对字符序列的任何字符串操作必须在第一个\0
到达时停止。如果字符序列在\0
之后有其他内容,则不会打印,因为字符串操作会在第一个\0
字符上停止。
但是,行结束是一个正常字符,其视觉效果是指终端或文本编辑器在新行的行结束后打印下一个字符。
如果你想有一个完整的行尾字符的矢量(并打印出来这样),你必须前往载体和填充:
char s[256];
int i;
for (i = 0; i < 256; ++i)
s[i] = '\n';
printf("%c\n", s[10]);
ASCII码(十进制/数字)值行字符的结束(\n
)是12,因此,下面的片段将相当于:
char s[256];
int i;
for (i = 0; i < 256; ++i)
s[i] = 12;
printf("%c\n", s[10]);
这并不然而工作(它不打印一个新行):
char s[256] = {'\n'}; // or {12};
printf("%c\n", s[10]);
由于{'\n'}
效果是分配\n
到所述阵列的所述第一元件和阵列的类型,您在制作(char[]
,int[]
或任何)其中remainings 255字符填充有值0,不管。如果你写一对空括号{}
,所有的元素将是0
因此,这两个语句是等价的:
char s[256] = {}; // Implicit filling to 0.
char s[256] = {0}; // Implicit filling to 0 from the second element.
然而,如果没有定义数组:
char s[256];
该数组未填充(未初始化),因此,s
的每个元素都将包含任何内容,直到您使用值填充为止,例如for
。
我希望所有这些例子都能得到全貌。
你期望它打印什么? –
它打印一个文字零,所以'printf'认为它完成了,因为它标记了一个字符串的末尾。 – usr2564301
我的不好,搞错了:) @SouravGhosh –