2014-09-23 69 views
-1

我想知道,为什么在我的打印结束时总是有10个。打印char数组后,为什么会出现10?

我想输入一个字符串的空格,然后打印出所有的字符。

输入:hello

输出:104 101 108 108 111 10

应该输出:104 101 108 108 111

unsigned char input[256]; 
    fgets(input,sizeof(input),stdin); 

    for(int i = 0; input[i] != '\0'; i++) { 
    printf("%u ",input[i]); 
    } 
+1

嗯,当你键入...时,注意你的手指是他们碰到'o'还是别的什么的最后一个键? – 2014-09-23 19:23:57

+0

答案提到10是为ENTER键传递的字符的编码是正确的,除了它们引用ASCII。我们不知道你的控制台正在使用什么字符集和编码,但它可能不是ASCII。按照设计,许多字符集是ASCII的超集,其大部分编码与公共子集的ASCII相同。通过Linux中的'locale'和Windows中的'chcp'找出你真正使用的是什么。并且,请记住,您的程序的使用可能会使用不同的东西。 – 2014-09-23 23:47:50

回答

8

10是换行。 fgets消耗换行符将其复制到缓冲区。从the docs

如果发现文件结束或发现换行符,解析将停止,在这种情况下,str将包含该换行符。

该文档是您的朋友。

1

您正在打印换行符。

打印出来时,这表示为数字10(ASCII)。

1

线'\n'的端部具有代码10。

请注意,打印出6个数字。我打赌你键入6键:

^hË大号大号Ø输入

所以输入不是 “你好”,但'h''e''l''l''o''\n'

fgets()阅读这6个并保存在input[]。它还附加了一个'\0',所以保存了7 char