打印包含多个NUL的整个字符串

时间:2014-09-15 17:45:13

标签: c string

 char *string1;                  
 int i; 
 string1=(char*)malloc(14*sizeof(char));
 for(i=0;i<10;i++)
 string1[i]=i+65;
 string1[10]=0;
 string1[11]=65;
 string1[12]=67;
 str[13]=0;  
 printf("%s",string1);

但输出是第一个NUL。是否可以将它打印到最后一个NUL而不使用循环?

1 个答案:

答案 0 :(得分:1)

如果您知道它们存在,您只能编写嵌入的空值,并且您知道数据通过某种方式或其他方式存在多长时间。字符串被正式定义为由(第一个)空字节终止的字节序列。因此,您要编写的内容不是标准定义的字符串。但是,假设使用C99或C11编译器(以便i循环中可以声明for):

char *string1 = (char *)malloc(14 * sizeof(char));
for (int i = 0; i < 10; i++)
    string1[i] = i + 65;
string1[10] = 0;
string1[11] = 65;
string1[12] = 67;
str[13] = 0;  
if (fwrite(string1, sizeof(char), 13, stdout) != 13)
    …deal with short write (error)…

如果您坚持使用C89编译器,请在循环外定义int i,就像在问题中一样。

有些人会因为在malloc()的电话中加入演员而侮辱你。在标准C中没有必要(除非你在一个异常不寻常的环境中工作,否则你不会有预标准的C编译器),但只要你设置了编译器选项就不会有任何伤害。所以,如果你不小心忘记了#include <stdlib.h>,你就会被告知。这应该在标准符合模式下使用C99或C11编译器自动发生。