c - 如何在c中将多个字符串存储在数组中
问题描述
嘿,所以我目前正在尝试存储来自命令行参数的文本文件的多个字符串。我被告知要使用 2D 数组,所以我声明了 size [count] 之一,在此示例中为 4。但是,当我必须使用 fgets 将每一行存储在数组中时,它似乎不起作用,因为当我将结果打印到控制台时,我得到了一堆随机字符。
count = 4;
char string_array[count][100];
int loop_counter = 0;
while (!feof(file_pointer) && loop_counter < 10)
{
fgets(string_array[loop_counter], 150, file_pointer);
loop_counter += 1;
}
printf("First string is %s", string_array[0]);
最后一个 printf 语句返回:
第一个字符串是▒▒ap▒ X▒a
查看随机字符^。第一个字符串应该是“A 1 2 3 4 5”。文本文件如下所示:
A 1 2 3 4 5
B 0 0
C 1 1
F 2 2
解决方案
正如@kleshenki 提到的,这可能是一个编码问题。
我尝试重构代码以使用 getline 。所以试一试。如果它不起作用,我将删除此帖子。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int count = 4;
char string_array[count][100];
FILE *fp = fopen("test.txt","r");
ssize_t read;
int i = 0;
size_t n = 100;
char *lines = string_array[i];
while (i<count&&( read=getline(&lines, &n, fp) )!= -1)
{
lines = string_array[i];
}
printf("First string is %s", string_array[0]);
printf("Second string is %s", string_array[1]);
fclose(fp);
}
推荐阅读
- java - 测试非存储库方法时如何执行与“when,thenReturn”等效的操作
- flutter - 使用颤振选择时如何通过更改颜色和大小来创建圆形按钮
- python - 尝试访问从 Windows 复制的数据时,运行 Ubuntu 18 LTS 的 WSL2 上出现 Pyperclip 错误
- angular - Angular Async Service - 可以子类化以重用代码?
- javascript - Alpine.js 未定义变量:调度
- deno - 如何修复:“deno 错误:无法解析模块‘x’”
- javascript - 通过url参数动态获取json文件结果
- delphi - 如何在 Delphi 备忘录上进行 Unicode 装饰
- ruby-on-rails - Rails 和 Heroku 本地没有日志记录/信息
- java - apache camel拦截器抛出一个不适当的异常