我正在尝试创建一个简单的 C 程序,该程序从文件中读取字符串行,然后将其输出到终端,但显然它一直崩溃,我不知道我哪里出错了......我怀疑这可能是我在代码中处理数组的方式,因为我对 C 仍然很陌生,所以我仍然习惯于使用和声明数组的方式..
这是我的代码目前的样子:
typedef struct my_string
{
char str[256]; // my string contains an array of 255 characters + null
} my_string;
//Output lines from the file into terminal
void print(int count, my_string a[20]) {
for (int i = 0; i < count; i++)
{
printf("%s\n", a[i]);
}
}
//Read lines from file
void read(FILE *file_ptr) {
int i;
int numberOfLines;
my_string lineArray[20];
fscanf(file_ptr, "%d\n", &numberOfLines);
for (i=0; i < numberOfLines; i++) {
fscanf(file_ptr, "%[^\n]\n", lineArray[i].str);
}
print(numberOfLines, lineArray);
}
void main()
{
FILE *file_ptr;
// open the file and read from it
if ((file_ptr = fopen("mytestfile.dat", "r")) == NULL)
printf("File could not be opened");
else {
read(file_ptr);
}
fclose(file_ptr);
}
我试图读取的文本文件是这样的:
10
Fred
Eric
James
Jaiden
Mike
Jake
Jackson
Monica
Luke
Kai
谢谢
最佳答案
一些东西。
1) main
的返回类型是 int
而不是 void
。
int main(){
...
}
2) 如果您无法打开文件,则不应将其关闭。将
fclose
移动到 else 语句中。else{
read(file_ptr);
fclose(file_ptr);
}
3) 在
print
函数中,确保打印的是字符串而不是结构地址。编译器应该给出警告。void print(int count, my_string a[20]) {
for (int i = 0; i < count; i++)
{
printf("%s\n", a[i].str); /* a[i].str not a[i]*/
}
}
关于c - 我想我以错误的方式声明和使用数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50663097/