c/c++语言开发共享使用fscanf_s时访问冲突

我想以特定格式读取文件,因此我使用fscanf_s和while循环。 但是一旦处理了fscanf_s,程序就会发生访问冲突(0xC0000005)崩溃。

这是代码:

FILE *fp; errno_t err = fopen_s(&fp, "C:\data.txt", "r"); if (err != 0) return 0; int minSpeed = 0; int maxSpeed = 0; char axis = '@'; while(!feof(fp)) { int result = fscanf_s(fp, "%c;%d-%dn", &axis, &minSpeed, &maxSpeed); if (result != 3) continue; } fclose(fp); 

该文件的内容是基于行的,例如:

 -;10000-20000 X;500-1000 S;2000-2400 

有人能帮助我吗?

    显然, fscanf_s()在变量的地址后面需要一个size参数

     fscanf_s(fp, "%c;%d-%dn", &axis, 1, &minSpeed, &maxSpeed); /* extra 1 for the size of the ^^^ axis array */ 

    但我建议你不要使用*_s函数:它们比明确命名的函数更糟糕 – 它们需要相同的检查,并且当你不是时,它会让你感到安全。 我建议你不要使用它们,因为它们存在错误的安全感,并且它们在许多实现中都不可用,这使得你的程序只在有限的可能机器子集中工作。

    使用普通的fscanf()

     fscanf(fp, "%c;%d-%dn", &axis, &minSpeed, &maxSpeed); /* fscanf(fp, "%1c;%d-%dn", &axis, &minSpeed, &maxSpeed); */ /* default 1 ^^^ same as for fscanf_s */ 

    而你对feof()是错误的。
    当出现错误(文件结束或匹配失败或读取错误……)时, fscanf()返回EOF。

    您可以使用feof()来确定fscanf()失败的原因,而不是检查它在下次调用时是否会失败。

     /* pseudo-code */ while (1) { chk = fscanf(); if (chk == EOF) break; if (chk < NUMBER_OF_EXPECTED_CONVERSIONS) { /* ... conversion failures */ } else { /* ... all ok */ } } if (feof()) /* failed because end-of-file reached */; if (ferror()) /* failed because of stream error */; 

    如果您认为文件(data.txt)存在,则您的应用程序可能无法运行,并且当前目录设置为文件所在的位置。 这会导致fopen_s()失败。

      以上就是c/c++开发分享使用fscanf_s时访问冲突相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/541952.html

      (0)
      上一篇 2021年1月5日
      下一篇 2021年1月5日

      精彩推荐