我正在编写一个程序来读取文件中的十六进制码并通过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函数从文件读取而无需动态内存分配?
答案 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);