为什么这个程序不会将数组的内容打印为字符串?

时间:2015-12-11 12:08:11

标签: c arrays

此程序应存储相反的文本行并打印出来。我证明反向文本存储在数组中,因为我可以一次打印出一个字符,但不会将其作为字符串打印出来。

#include <stdio.h>

//Print lines in reverse

int main()
{
    int c=0, iget=0, iprnt=0;

    char getline[1000];
    char printline[1000];

    while ((c=getchar())!='\n' && c!=EOF){
        getline[iget] = c;
        ++iget;
    }

    while (iget >= 0){
        printline[iprnt] = getline[iget];
        ++iprnt;
        --iget;
    }

    printf ("%c%c%c%c%c%c%c%c\n", printline[0], printline[1],
        printline[2], printline[3], printline[4], printline[5],
        printline[6], printline[7]);
    printf ("Result: %s\n", printline);
}

我已经花了很长时间在它上面并尝试了很多东西,包括在字符串后面的下一个位置添加'\ 0'。没工作。 我很想知道它为什么不打印以及它将如何修复它。

1 个答案:

答案 0 :(得分:4)

在第二个while循环中,您复制了太多字符,并且从输入字符串末尾之外的一个字符开始。您还需要终止printline

变化:

while (iget >= 0){
    printline[iprnt] = getline[iget];
    ++iprnt;
    --iget;
}

为:

while (--iget >= 0){                    // <<<
    printline[iprnt] = getline[iget];
    ++iprnt;
}
printline[iprnt] = '\0';                // <<<

LIVE DEMO