c - 如何从文件中扫描字符串并将其存储在字符串数组(二维数组)中?
问题描述
我正在扫描文件中的字符串并将其存储到字符串数组中。当我编译我的程序时,它不会产生任何错误,但是当我运行它时,它会显示Segmentation fault (core dumped)
. 我知道错误在 fscanf 语句中,但我不知道出了什么问题。
我的代码如下所示:
FILE *stringsIn = fopen("strings.txt", "rt");
char *strings[INPUT_STRINGS];
for (int i = 0; i < INPUT_STRINGS; i++)
fscanf(stringsIn, "%s ", &strings[i][0]);
解决方案
你有一个指针数组,但你没有为每个字符串分配空间。在这种情况下,您可以做的是预先分配足够大的缓冲区或在预先分配的缓冲区中读取,查看读取了多少字符并分配该大小的字符串。
FILE *stringsIn = fopen("strings.txt", "rt");
char *strings[INPUT_STRINGS];
for (int i = 0; i < INPUT_STRINGS; i++) {
strings[i] = (char*)malloc(2048); //allocate a big enough buffer
fscanf(stringsIn, "%2047s ", &strings[i][0]);
}
第二个版本是这样的:
FILE *stringsIn = fopen("strings.txt", "rt");
char *strings[INPUT_STRINGS];
char temp[2048];
for (int i = 0; i < INPUT_STRINGS; i++) {
fscanf(stringsIn, "%2047s ", &temp);
size_t len = strlen(temp);
strings[i] = (char*)malloc(len + 1);
strncpy(strings[i], temp, len);
}
推荐阅读
- javascript - 模态不想出现在 login.php 页面上
- python - Python - 类中的可变长度参数列表
- git - 撤消分支中的所有新提交
- robotframework - 机器人固件:内置模块:设置套件变量:如何在新范围内覆盖新创建的变量?
- android - 是否可以从 base64String API 响应调用生成 APK 文件?
- powershell - Powershell Classes 构造函数调用了两次 - 使用模块和 Import-Module
- angular - Angular 新手 - 编写日志文件
- python - 滚动和然后使用此滚动和获得随机整数
- aws-lambda - AWS Lambda Endpoint 请求超时 Python 中的雪花连接需要很长时间才能连接
- python - Chrome 中的 Selenium 长页面加载