C语言 跳过文件头后从文件阅读数据

bprjcwpo  于 2023-01-01  发布在  其他
关注(0)|答案(2)|浏览(183)

我尝试从文件中读取数字,但首先我必须跳过一个标题,这是一个仅用于测试函数的小代码,现在...跳过部分文件的函数工作正常,但当我尝试从文件中读取一些内容时,在我收到一个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;
}
hgqdbh6s

hgqdbh6s1#

查尔古诺1 [5];//“P5”:2个字节,“\n”:1个字节,“\0”:位元组

jchrr9hc

jchrr9hc2#

我就是找不到我的错误
*scanf()中,不要使用没有宽度的"%s"
fscanf(poza, "%s", gunoi1);溢出char gunoi1[2];,因为它太小,无法存储 string"P5",从而导致 undefined behavior(UB)。请记住,string 始终有一个尾随的 *null字符 *,否则它就不是字符串。
此外,始终检查输入函数的返回值。
如果第一行的长度是正常的,那么还有一个简单的选择:

char buf[1000];
if (fgets(buf, sizeof buf, poza)) {
  ; // Successfully read the first line.
}

相关问题