我尝试从文件中读取数字,但首先我必须跳过一个标题,这是一个仅用于测试函数的小代码,现在...跳过部分文件的函数工作正常,但当我尝试从文件中读取一些内容时,在我收到一个seg错误和表示Status_acces_violation的错误代码后,但我就是找不到我的错误文件里的信息总是像这样
P5
二十五万六千七百八十九
125
125 236 789 ...(一堆数字)
#include <ctype.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *salt_header(FILE *poza){
char gunoi1[2];
fscanf(poza, "%s", gunoi1);
printf("%s\n", gunoi1);
int gunoi2;
fscanf(poza, "%d ", &gunoi2);
printf("%d ", gunoi2);
fscanf(poza, "%d", &gunoi2);
printf("%d\n", gunoi2);
fscanf(poza, "%d", &gunoi2);
printf("%d\n", gunoi2);
return poza;
}
int main()
{
FILE *poza;
char gunoi1[2], *nume;
nume = malloc(256 * sizeof(char *));
if(nume == NULL)
exit(-11);
scanf("%s", nume);
poza = fopen(nume, "r");
if(poza == NULL){
printf("Failed to open file\n");
exit(-1);
}
poza = salt_header(poza);
int numar;
for(int i = 0; i < 3; i++){
fscanf(poza, "%d", &numar);
printf("%d ", numar);
}
fclose(poza);
free(nume);
return 0;
}
2条答案
按热度按时间hgqdbh6s1#
查尔古诺1 [5];//“P5”:2个字节,“\n”:1个字节,“\0”:位元组
jchrr9hc2#
我就是找不到我的错误
在
*scanf()
中,不要使用没有宽度的"%s"
。fscanf(poza, "%s", gunoi1);
溢出char gunoi1[2];
,因为它太小,无法存储 string"P5"
,从而导致 undefined behavior(UB)。请记住,string 始终有一个尾随的 *null字符 *,否则它就不是字符串。此外,始终检查输入函数的返回值。
如果第一行的长度是正常的,那么还有一个简单的选择: