我正在尝试创建一个简单的 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/

10-10 16:40