C中的文件I / O程序:分段故障(核心转储)

时间:2014-11-23 12:26:10

标签: c file io embedded spi

我正在编写一个程序来读取文件中的十六进制码并通过SPI将其提供给另一个芯片。我尝试使用 fgets 读取hexfile中的每一行,然后使用 sscanf 将其解析为 unsinged int array hexfile的格式为如下:

ff32
34dc
1234
32d4

...

int main (void)
{
    FILE *fp1;
    int i = 0;
    fp1 = fopen("hexfile.txt", "r+");
    char line[500];
    unsigned int hex[40];

    while (fgets(line, sizeof(line), fp1) != NULL) {

        while (sscanf(line, "%x", &hex[i]) == 1) {
                    printf("%4x \n", hex[i]);
                    i++;
            }
    }

    fclose(fp1);
    return 0;
}

错误:分段错误(核心转储)当您尝试取消引用NULL指针时,我大致知道这些结果。但是我的代码有什么问题?其次,有没有更好的方法使用其他文件I / O函数从文件读取而无需动态内存分配?

2 个答案:

答案 0 :(得分:0)

此循环将永远重复或直到写入hex[i]打破某些内容

while (sscanf(line, "%x", &hex[i]) == 1) {

在回答OP的第二个问题时,这是另一种方式

#include <stdio.h>

int main()
    {
    FILE *fp1;
    int i = 0, j;
    unsigned int hex[40];
    fp1 = fopen("hexfile.txt", "rt");
    while (i<40 && fscanf (fp1, "%x", &hex[i]) == 1)
        i++;
    fclose(fp1);

    for (j=0; j<i; j++)               // check
        printf("%4x \n", hex[j]);
    return 0;
}

答案 1 :(得分:0)

您需要删除while并将其替换为if:

FILE *fp1;
int i = 0;
fp1 = fopen("d:\hexfile.txt", "r+");
char line[500];
unsigned int hex[40];

while (fgets(line, 8, fp1) != NULL) {
    if (sscanf(line, "%x", &hex[i]) == 1) {  /*here while => if */ 
        printf("%4x \n", hex[i]);
        i++;
    }
}

fclose(fp1);