4

我对 C 语言非常陌生,我对 C 语言中最基本的想法感到困惑。我们正在开始构建结构,基本上我们正在处理的任务是读取一个分隔文件并将内容保存到一个结构中。文件的第一行包含条目数,我目前要做的就是让程序读取并保存该数字并将其打印出来。请不要假设我对 CI 有任何了解,但我对此真的很陌生。

这段代码给了我一个分段错误

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


struct info{
  char name[100];
  char number[12];
  char address[100];
  char city[20];
  char state[2];
  int zip;
};

int strucCount;
char fileText[1];

int main(char *file)
{
  FILE *fileStream = fopen(file, "r");
  fgets(fileText, 1, fileStream);

  printf("\n%s\n",fileText);

  fclose(fileStream);

}

这是示例文件

4
mike|203-376-5555|7 Melba Ave|Milford|CT|06461
jake|203-555-5555|8 Melba Ave|Hartford|CT|65484
snake|203-555-5555|9 Melba Ave|Stamford|CT|06465
liquid|203-777-5555|2 Melba Ave|Barftown|CT|32154

感谢大家的评论,他们帮助了很多,对吉姆感到抱歉。我工作的睡眠很少,并不是要冒犯任何人,我相信我们都去过那里哈哈。

4

1 回答 1

3

建议:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    #define MAXLINE 80
    #define MAXRECORDS 10

    struct info{
      char name[100];
      char number[12];
      char address[100];
      char city[20];
      char state[2];
      int zip;
    };

    int 
    main(int argc, char *argv[])
    {
      FILE *fp = NULL;
      int nrecs = 0;
      char line[MAXLINE];
      struct info input_records[MAXRECORDS];

      /* Check for cmd arguments */
      if (argc != 2) {
        printf ("ERROR: you must specify file name!\n");
        return 1;

      /* Open file */
      fp = fopen(argv[1], "r");
      if (!fp) {
        perror ("File open error!\n");
        return 1;
      }

      /* Read file and parse text into your data records */
      while (!feof (fp)) {
        if (fgets(line, sizeof (line), fp) {
          printf("next line= %s\n", line);
          parse(line, input_records[nrecs]);
          nrecs++;
        }
      }

      /* Done */
      fclose (fp);
      return 0;
    }    
  fclose(fileStream);

}

关键点:

  • 注意使用“argc/argv[]”从命令行读取输入文件名

  • line、nrecs 等都是局部变量(不是全局变量)

  • 检查错误情况,例如“未给出文件名”或“无法打开文件”

  • 循环读取数据,直到输入文件结束

  • 将从文本文件中读取的数据解析为二进制记录数组 (TBD)

于 2012-10-01T01:06:20.753 回答