微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我使用 'fgets' 会导致结构指针的 char 数组属性填充?

如何解决为什么我使用 'fgets' 会导致结构指针的 char 数组属性填充?

我正在 Linux 64 位机器上编译。

运行 gcc struct-string-gates.c && ./a.out 提供以下意外输出Val: '0',Name: '123 -> x'

但是,如果我注释掉 while(fgets.. 循环,我会得到以下预期输出Val: '0',Name: ''

我是否在某处造成了溢出?

gates.txt (UTF-8)

123 -> x

struct-string-gates.c

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

#define FILE_NAME "gates.txt"
#define MAX_LINE_LEN 100

#define VAR_NAME_LEN 5

char **readLines(char *fileName) {
    FILE *fp = fopen(fileName,"r");
    char *buff = malloc(MAX_LINE_LEN * sizeof(char));
    
    // Including the following while loop seems to cause the issue
    while (fgets(buff,MAX_LINE_LEN,fp) != NULL) {
        // Empty fn
    }

    char **lines = NULL;
    fclose(fp);
    free(buff);
    return lines;
}

typedef struct Gate Gate;
struct Gate {
    char name[VAR_NAME_LEN];
    int output;
};

int main() {
    char **lines= readLines(FILE_NAME);

    Gate *newGate = malloc(sizeof(Gate));
    printf("Val: '%d',Name: '%s'\n",newGate->output,newGate->name);

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。