c - 没有从二维字符数组中获取内容
问题描述
我试图读取一个文本文件并将二维字符数组返回给主函数。文本文件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;
}
主函数什么也没有打印出来,不知道我哪里做错了?
解决方案
getIps
正在分配line
为局部变量。您不能以这种方式返回局部变量;一旦函数退出,该内存就会被释放。
此外,您分配line
为 的二维数组char
,但调用者试图将其映射到指向 的一维指针数组char
。同样,这不起作用。
getIps
可以改为分配类似的指针数组,并用于
malloc
为每个字符串分配空间。但是,由于调用者已经开始这样做,因此将地址传递给getIps
并让它使用它会更简单。
还有其他问题。代码假设只有三行输入;如果还有更多,您将超出缓冲区。您正在对应该使用的东西进行硬编码#define
,例如int total=3
. 您不检查fopen
.
推荐阅读
- powerpoint - 不是有效的办公插件 (Web)
- jrebel - 开源eclipse插件替换java代码中所做的最新更改,无需重启服务器
- javascript - 再说一遍:提交不是一个函数
- scala - Scala比较两个分隔字符串并生成第三个分隔字符串
- vision - 将 AutoML TFLite 编译到 Edge TPU
- json - 空手道框架:如何列出两个巨大 JSON 文件的差异
- django - 每天在 Django 中更新模型的所有实例
- swagger - Swagger 文档在编辑器中显示“语义错误”
- openssl - 通过 openssl.conf 文件加载 OpenSSL 自定义引擎显示错误
- javascript - Material UI Datagrid 的过滤器功能无法正常工作