我想将char []中的所有字符复制到另一个char []。但是,假设有一个'\ 0'然后我想把它当作一个普通字符 - 如果你愿意的话,那就是文字。 因此,当我使用格式说明符%s打印出char []时,它不应该在中间停止。 e.g。
// chars copied to array x
char x[] = {'h','e','\0','l','l','o','\0'}
printf("%s\n",x); // prints 'he\0llo'
有办法做到这一点吗?
答案 0 :(得分:1)
您需要明智地打印数组元素,将不可打印的字符转换为您想要查看的内容。
打印出he\0llo\0
执行:
char x[] = {'h','e','\0','l','l','o','\0'};
for (size_t i = 0; i < sizeof(x); ++i)
{
if ('\0' == x[i])
{
printf("%s", "\\0");
}
else
{
printf("%c", x[i]);
}
}
答案 1 :(得分:1)
如果您知道需要复制多少个字符,请使用memcpy
。如果x
是一个真实数组,sizeof(x)
将为您提供该数量,但如果您将x
作为参数传递给函数,则sizeof
将无效在该函数内部(它只显示指针的大小),所以基本规则是你的字符串应该是NUL终止的,或者你应该将它们的大小保存在一个单独的变量中。
对于打印,您可以按@alk建议在for
循环中打印,或使用fwrite
将任何缓冲区(可能带有NUL)写入stdout
:
fwrite(x, sizeof(x), 1, stdout); /* sizeof will work only for a real array */
答案 2 :(得分:1)
错误地使用"%s"
。在第一个空字符或printf("%s"
之后,无法使用'\0'
打印包含数据的数组。
char x[] = {'h','e','\0','l','l','o','\0'}
printf("%s\n",x); // This only prints "he"
printf("%s",...
用于打印字符串。 x
是一个字符串,仅包括第一个'\0'
。
要“将char []中的所有字符复制到另一个char []。”,请使用memcpy()
。
char x[] = {'h','e','\0','l','l','o','\0'}
char y[sizeof x];
memcpy(y, x, sizeof x);
代码可以使用"%c"
来打印所有内容,但使用'\0'
打印的内容因系统而异。
size_t i;
for (i=0; i< sizeof x; i++)
printf("%c", x[i]);