无法理解 fgets 输出

问题描述 投票:0回答:1

在这段代码中,我让用户输入他们想要写的字符数。

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

int main(void) {

    // Ask the user to enter how many characters you want to write.
    printf("Enter how many characters you want to write. \n");
    int n;
    int itemsRead = scanf_s("%d", &n);

    if (itemsRead != 1) {
        // scanf didn't read the expected input, handle the error
        printf("Error: Input is not in the expected format.\n");
        return 1; // Return a non-zero value to indicate an error
    }
    
    // Clear the input buffer
    int c;
    while ((c = getchar()) != '\n' && c != EOF);

    char* string = NULL;
    string = (char*)malloc(n * sizeof(char));

    if (string != NULL) {
        printf("Enter the string \n");
        fgets(string, n, stdin);
        printf("string is: %s\n", string);
    }

    free(string);
    string = NULL;
}

问题是: 如果用户输入 3 个字符并尝试输入 3 个字符,则仅显示前 2 个字符。

我试图询问chatgpt,但它不起作用,一直告诉我问题出在fgets中,因为它读取换行符并将其替换为最后一个字符,因为没有空格,但如果是真的,为什么它将换行符替换为最后一个字符为什么它没有用换行符替换最后一个字符我不明白。请治愈。

c pointers fgets
1个回答
0
投票

查阅

fgets
文档

从给定文件流中最多读取 count - 1 个字符并将它们存储在 str 指向的字符数组中。如果找到换行符(在这种情况下 str 将包含该换行符)或者发生文件结尾,则解析停止。如果读取字节并且没有发生错误,则在写入 str 的最后一个字符之后紧接着的位置写入一个空字符。

您的通话最多读取

n-1
个字符。由于需要空终止符才能使其成为有效字符串,因此具有三个字节空间的 char 数组只能保存具有两个字符的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.