字符串输出不符合预期

时间:2015-06-18 00:22:49

标签: c

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {
   char hello[5];
   hello [0] = 'H';
   hello [1] = 'e';
   hello [2] = 'l';
   hello [3] = 'l';
   hello [4] = 'o';

   char world[5];
   world [0] = 'W';
   world [1] = 'o';
   world [2] = 'r';
   world [3] = 'l';
   world [4] = 'd';

   printf ("%s %s!\n", hello, world);
   return EXIT_SUCCESS;
}

当我运行上面的代码时,我得到:

Hello WorldHello!

有人可以解释为什么我的输出要么重复单词要么打印出奇怪的数字和字母? 是因为我没有包含&#39; \ 0&#39;?

1 个答案:

答案 0 :(得分:6)

C中的字符串需要NUL(&#39; \ 0&#39;)终止。你所拥有的是没有NUL终结符的char数组,因此不是字符串。

尝试以下方法。双引号产生字符串(自动添加NUL终止符)。

const char *hello = "Hello";
const char *world = "World";

或者你单独设置每个字符的原始方法,在这种情况下你需要明确设置NUL终止符。

char hello[6];
hello [0] = 'H';
hello [1] = 'e';
hello [2] = 'l';
hello [3] = 'l';
hello [4] = 'o';
hello [5] = '\0';

char world[6];
world [0] = 'W';
world [1] = 'o';
world [2] = 'r';
world [3] = 'l';
world [4] = 'd';
world [5] = '\0';