【发布时间】:2018-04-05 15:42:03
【问题描述】:
我正在尝试将 5000 个名称的文件读入 C 中的二维数组,其格式如下:
"MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET"
目前,它只是给我“分段错误:11”。我正在尝试将每个名称读入其自己的二维数组,但我不知道如何执行此操作。到目前为止,这是我的代码:
//initialise array and chars
char names[5000][10] = {""};
int i;
char separator = ',';
char ch;
//open file
FILE *namesToBeSorted;
namesToBeSorted = fopen(argv[1], "r");
int j = 0;
//find file size
fseek(namesToBeSorted, 0L, SEEK_END);
int fileSize = ftell(namesToBeSorted);
rewind(namesToBeSorted);
//read from file into array
for (i = 0; i < fileSize; i++){
fscanf(namesToBeSorted, "%c", &ch);
while(ch != separator)
names[i][j] = ch;
fscanf(namesToBeSorted, "%c", &ch);
j++;
}
//print array
for (i = 0; i<5; i++){
for(j = 0; j < 10; j++){
printf("%c\n", names[i][j]);
}
}
感谢任何帮助。
【问题讨论】:
-
请将您的代码转换为minimal reproducible example 并发布。
-
'目前,它只是给我“分段错误”所以现在是学习如何使用调试器的时候了。这对你和读者来说是一个更好的用途'时间。
-
请注意,
"PATRICIA"是 11 个字符,包括\0。您应该扫描引号,而不是逗号。并且您必须将\0添加到每个名称中。 -
显然您并不关心 NUL 终止符,每个字符串都需要由 NUL 终止(请阅读 C 教科书中处理字符串的章节)。有没有超过 9 个字符的名字?
-
还要注意
fileSize在翻译模式 (Windows) 下阅读并不准确,因为0xd0xa被翻译为单个\n。更好地扫描直到fscanf返回 EOF。
标签: c arrays multidimensional-array