首页 > 解决方案 > 没有从二维字符数组中获取内容

问题描述

我试图读取一个文本文件并将二维字符数组返回给主函数。文本文件ips.txt如下:

hello1
hello2
hello3

我的代码如下:

define BUF 20
define TOT 3

char ** getIps(){
    char line[TOT][BUF];
    FILE *plist = NULL;
    int i = 0;
    int total = 0;

    plist = fopen("ips.txt", "r");
    while(fgets(line[i], BUF, plist)) {
        line[i][strlen(line[i]) - 1] = '\0';
        i++;
    }
    return line;

}

int main(void) {
    int i=0;
    char (*line)[TOT];
    line=getIps();
    int total=3;
    for(i = 0; i < total; ++i)
        printf("%s\n", line[i]);

    return 0;
}

主函数什么也没有打印出来,不知道我哪里做错了?

标签: c

解决方案


getIps正在分配line为局部变量。您不能以这种方式返回局部变量;一旦函数退出,该内存就会被释放。

此外,您分配line为 的二维数组char,但调用者试图将其映射到指向 的一维指针数组char。同样,这不起作用。

getIps可以改为分配类似的指针数组,并用于 malloc为每个字符串分配空间。但是,由于调用者已经开始这样做,因此将地址传递给getIps 并让它使用它会更简单。

还有其他问题。代码假设只有三行输入;如果还有更多,您将超出缓冲区。您正在对应该使用的东西进行硬编码#define,例如int total=3. 您不检查fopen.


推荐阅读