逐行读取文本文件并放入单独的字符串:line1,line2,line3等

时间:2015-08-23 10:17:51

标签: c segmentation-fault scanf

我试图逐行读取文件并将这些行放入单独的字符串:line1,line2,line3等(最大总行数始终为13,文本行的大小可以在3之间变化-99个字符)。

目的是发送将行发送到SQL命令以填充数据库。最后一部分我已经开始工作,但我似乎无法从文本文件中获得一些剩余的数据并将单独的行放入单独的字符串中。我不断收到分段错误。

有人可以帮我一个例子吗?

1 个答案:

答案 0 :(得分:1)

因为你没有显示相关代码而只是因为。

读取文本文件时的分段错误通常是由未分配的内存引起的,即无法指向的char指针

这是一个示例,读取13行最大大小99,带有2D字符数组:

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

#define ROWS 13
#define  SIZE 101

int main() {
    int i;
    char lines[ROWS][SIZE];
    char *cr;

    for(i=0; i<ROWS; i++) {
        cr = fgets(lines[i], SIZE, stdin);
        if (cr == NULL) {
            fprintf(stderr, "Only %d lines found\n", i);
            return 1;
        }
        if ((*cr != 0) && (cr[strlen(cr) - 1] != '\n')) {
            fprintf(stderr, "Line %d is too long\n", i + 1);
            char buf[256];
            do {
                cr = fgets(buf, sizeof(buf), stdin);
                if (cr == NULL || *cr == '\0') {
                    fprintf(stderr, "Fata error line %d\n", i+1);
                    return 1;
                }
            } while (cr[strlen(cr) - 1] != '\n');
        }
    }
    /* do what you want with the 2D array lines
    ... */
    return 0;
}

但是这个char *line[13]会导致未定义的行为(可能是SIGSEGV),因为内存尚未分配。