0

我正在尝试读取多个文件。文件的格式类似于YYYY-mm-dd-HH-MM.txt,例如2012-11-26-18-50.txt

我有以下代码

char text_buffer[1000];
char file_buffer[256];
int year, month, day, hour, minute;
year = 2012; month = 11; day = 26; hour = 18; minute = 0;

sprintf(file_buffer, "%d-%d-%d-%d-%d.txt", year, month,day,hour,minute);
FILE *ptr_file;
ptr_file=fopen(file_buffer, "r");
if(ptr_file != NULL)
    printf("File opened %s for reading.\n", file_buffer);
else
    printf("Couldn't open %s.\n", file_buffer);

line_number = 0;
while(fgets(buffer,sizeof(buffer), ptr_file) != NULL){
    if(strcmp(buffer, "")==0)
       return 0;
    char *views = strok(buffer, ",");
...
}

我假设这就是所需的所有信息。如果仍然不清楚我的问题出在哪里,我会发布所有这些。当我运行程序时。我得到了 Filed opened...Couldn't open...。然后是分段错误。

有人可以帮我解决这个问题吗?

谢谢。

4

4 回答 4

3

首先,您需要确保在无法打开文件时执行某些操作(可能返回错误代码)。尝试从 NULL FILE* 读取时会发生分段错误。

此外,您正在破坏内存,因为 file_buffer 是指针,而不是缓冲区。您需要将其初始化为某些东西。最后,您要确保关闭您打开的文件。

我还假设您在某处定义缓冲区。在您的代码示例中,我没有看到定义。也许您打算改用 text_buffer ?

如果您正在使用 LINUX 处理这些类型的内存损坏,我建议您使用两种工具。

  1. GDB,每次单步执行程序并检查变量。
  2. Valgrind,它将让您了解像这样的简单内存损坏。

这两个工具,一旦你熟练使用它们,就可以帮助消除大多数简单的编程错误。

于 2012-11-27T00:23:12.110 回答
1

file_buffer从未初始化,它可以指向任何地方。你可能想要这样的东西:

char file_buffer[PATH_MAX+1];

代替

char *file_buffer;
于 2012-11-27T00:15:35.163 回答
0

您没有file_buffer在任何地方初始化变量。

您应该将其初始化为

char file_buffer[256];
于 2012-11-27T00:15:50.827 回答
0

格式打印日期和时间,例如%02d,因为它们每个可能包含 1-2 位数字。

于 2012-11-27T01:14:50.233 回答