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

配列要素ごとに印刷し、印刷できない文字を代わりに見たいものに変換する必要があります。

印刷するには、次のようにし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は最初の までの文字列'\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 に答える