0

我想将 char[] 中的所有字符复制到另一个 char[]。但是,假设有一个 '\0' 那么我想把它当作一个普通字符——如果你愿意的话。因此,当我打印出带有格式说明符 %s 的 char[] 时,它不应该停在中间。例如

// chars copied to array x
char x[] = {'h','e','\0','l','l','o','\0'}

printf("%s\n",x); // prints 'he\0llo'

有没有办法做到这一点?

4

3 回答 3

1

memcpy如果您知道需要复制多少个字符,请使用。Ifx是您示例中的真实数组,sizeof(x)将为您提供该数量,但是如果您将x其作为参数传递给函数,sizeof则在该函数内将不起作用(它只会显示指针的大小),因此基本规则是您的字符串应该以 NUL 结尾,或者您应该将它们的大小保存在单独的变量中。

对于打印,您可以for按照@alk 的建议在循环中打印,或者使用fwrite将任何缓冲区(可能带有 NUL)写入stdout

fwrite(x, sizeof(x), 1, stdout); /* sizeof will work only for a real array */
于 2014-09-21T17:30:19.020 回答
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]);
  }
}
于 2014-09-21T17:12:35.397 回答
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是一个字符串,直到并包括 first '\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]);
于 2014-09-22T04:27:48.157 回答