打印char数组

时间:2017-05-01 09:33:31

标签: c arrays fgets

我想知道我的代码有什么问题。我通常使用scanf,但我正试图获得fgets的支持。但是当我尝试打印一个char数组,其中数组的每个元素都在一个单独的行上,但即使我将数组的限制定义为任意高的数字,它只有11行的限制。我是初学程序员,所以尽可能简单。

#include <stdio.h> 
#define max_line 4096
int main(void) {
    char str[max_line];
    printf("Enter string: ");
    fgets(str, max_line, stdin);
    for (int i=0;i <max_line && i!='\n'; i++) {
        printf("%c\n", str[i]);
    }
    return 0;
}

我想得到这样的结果。

Enter string: Hello 
H
e
l
l
o

但结果却截然不同

Enter string: Hello 
H
e
l
l
o 
/n //Sorry, I don't know how to add new lines in stackoverflow, but I think you get the idea.
/n
/n
/n
/n

2 个答案:

答案 0 :(得分:2)

您需要检查str[i] NOT EQUAL '\n',而不是检查i!='\n'。 正如@BLUEPIXY指出它意味着i!= 10,ASCII代码中'\ n'等于10。

因此将条件更改为:

for (int i=0;i <max_line && str[i]!='\n'; i++) {

答案 1 :(得分:-2)

试试此代码

int main(void) {
    int i;
    char str[max_line];
    memset(str, 0x0, max_line);
    printf("Enter string: ");
    fgets(str, max_line, stdin);
    for (i=0;i < strlen(str) ; i++) {
        printf("\n%c", str[i]);
    }
    return 0;
}

最后(在Hello之后),null char不在那里,因此是垃圾输出。