c - fgets 在另一个函数中,sizeof 总是 8

标签 c arrays char

<分区>

我在另一个函数中使用 fgets 来返回有效数据,因为我有一个菜单列表并且为每个函数写出 fgets 变得重复。我传递了一个字符数组 result[],它似乎总是 sizeof 8,这导致我的数据被剪裁。

void get_input(char result[]) {
    if(fgets(result, sizeof(result), stdin) == NULL) { // sizeof is ALWAYS 8!
        read_rest_of_line();
        printf("\n");
    } else
        clearbuffer(result);
}

void get_valid_input(char result[]) {
    get_input(result);

    while(result == NULL || result[0] == '\n') {
        printf("Enter a valid input or quit with CTRL+D\n");
        get_input(result);
    }

    /* remove newline replace with nul terminator */
    result[strlen(result)-1] = '\0';
}

正在执行:

char equipment_id[7];
char equipment_name[31+1];
char equipment_quantity[sizeof(long)];
long quantity;

printf("New ID: ");
get_valid_input(equipment_id);
printf("Please enter the equipment name: ");
get_valid_input(equipment_name);
printf("Please enter the total quantity: ");
get_valid_input(equipment_quantity);

最佳答案

当数组作为函数参数传递时,它会衰减为指向其第一个元素的指针。

在你的例子中,函数参数中的 char result[] 实际上是一个指针,因此 sizeof 给出了指针的大小,而不是数组。

要解决此问题,您可以显式传递数组的大小。

关于c - fgets 在另一个函数中,sizeof 总是 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28258714/

相关文章:

c - 何时使用动态 AES 加密和固定 key AES 加密?

c - 文件描述符自动更新到文件末尾

c - 如何根据 C 中的用户输入初始化结构数组的大小?

javascript - 未定义传递给数组

java - 如何比较字符串数组和字符数组

java - 复制字符串中的元音并在中间添加一个字符串

c - C 中的表达式 "double (f)(double)"可能是什么意思

c - 数组指针在线程中如何工作?

ruby - 将数组结果转换为 ruby

c++ - 是否可以使用 C 创建结构,例如只能设置一次的字符串 (char *) 数据?