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而不使用循环?
答案 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编译器自动发生。