请解释C中fgets()的这种行为

时间:2017-11-01 06:28:11

标签: c fgets

根据我的理解,fgets()将扫描输入,直到回车(\n),但我的代码显示不然。我不知道额外的线路来自哪里。有人可以解释一下吗?

#include <stdio.h>
#include <string.h>

#define BUF_SZ 256

void reverse(char str[]) {
    /* fill in the function body please */
    for (int i = 0, j = strlen(str) - 1; i < strlen(str) / 2; i++, j--)
    {
        char temp; // perform the swap
        temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
}

int main() {
    char mesg[BUF_SZ];
    printf("Enter a message please=> ");
    fgets(mesg,BUF_SZ,stdin);
    reverse(mesg);
    printf("%s\n",mesg);
    return 0;
}

这是输出: enter image description here

2 个答案:

答案 0 :(得分:4)

您输入的是“Hello”,后跟换行符。你颠倒了它,得到一个换行符后跟“你好”。然后你打印出来,接着是换行符。

fgets(mesg,BUF_SZ,stdin);

好的,现在我们有“你好”,然后是换行符。

reverse(mesg);

好的,现在我们有一个换行符后跟“olleH”。

printf("%s\n",mesg);

然后我们输出,然后是另一个换行符。

什么是神秘的?

答案 1 :(得分:2)

fgets文档中,它会在输入中保留回车符\n

  

最多读取 - 给定文件流中的1个字符,并将它们存储在str指向的字符数组中。如果发生文件结束或找到换行符,则读取停止,在这种情况下, str将包含该换行符。如果没有错误发生,请在写入str的最后一个字符后面的位置写入一个空字符。

所以,

"Hello\n"

变为:

"\nelloH"

这就是你得到的东西!