【问题标题】:Reading text file line by line and put into separate strings: line1, line2, line3, etc逐行读取文本文件并放入单独的字符串:line1、line2、line3 等
【发布时间】:2015-08-23 10:17:50
【问题描述】:

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

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

谁能帮我举个例子吗?

【问题讨论】:

  • 显示产生段错误的代码。

标签: c segmentation-fault scanf


【解决方案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),因为尚未分配内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 2021-07-30
    • 1970-01-01
    • 2019-11-11
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    相关资源
    最近更新 更多