我注意到,当您尝试在C语言中打印一个空字符时,将不会打印任何内容。
printf("trying to print null\n");
printf("%c", '\0');
但是,我试图逐一打印以下数组中的字符,直到第六个字符(即空字符)为止。
char s[] = "Hello\0Bye";
int i;
for(i = 0; i < 7; i++) {
printf("%c", s[i]);
}
printf("\n");
我希望打印“ Hello”,因为第六个字符为null,所以什么也不会打印。但是我的输出是:“ HelloB”。 似乎printf跳过了空字符,而只是转到下一个字符。我不确定为什么输出是“ HelloB”而不是“ Hello”。
任何见解都会受到赞赏。
答案 0 :(得分:1)
结构'\0'
通常用于表示空字符。在这里
printf("%c", '\0');
它什么也不打印。
在s
的声明中
char s[] = "Hello\0Bye";
当您打印类似图片时
for(i = 0; i < 7; i++) {
printf("%c", s[i]);
}
printf()
最多打印0<7(h)
,1<7(e)
.. 5<7(nothing on console)
,6<7(B)
迭代,因此6th
的字符为B
其印刷品HelloB
。
我期望打印“ Hello”吗?为此,您应该循环旋转直到遇到\0
。对于例如
for(i = 0; s[i] != '\0'; i++) { /* rotate upto \0 not 7 or random no of times */
printf("%c", s[i]);
}
或者甚至不需要检查s[i] != '\0'
for(i = 0; s[i]; i++) { /* loop terminates automatically when \0 encounters */
printf("%c", s[i]);
}
答案 1 :(得分:0)
您可以使用以下两个选项
1. size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
2.遍历每个字符并打印。
答案 2 :(得分:0)
int i; for(i=0; i<7; i++)
生成7次,而不是6次迭代。
打印\0
不会在控制台上生成任何像素(字符6),然后是第7个字符(后面是B
)。