在C的中间打印带空字符的char数组

时间:2018-09-05 12:09:50

标签: c null char

我注意到,当您尝试在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”。

任何见解都会受到赞赏。

3 个答案:

答案 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)。