【问题标题】:C, stack around variable f1 was corruptedC、变量 f1 周围的堆栈已损坏
【发布时间】:2012-11-05 18:20:39
【问题描述】:

你好,我有这个功能

int printofarray(int *j,double *n)
{
int x,k;
k=*j;
if(n==NULL) {
printf("array was not created\n");
return 1;}

for(x=0;x<k;x++){
printf("%.2lf\n",*(n+x));}

return 0;
}

当我使用它时,输出是这样的

34.77
6114.05
410.70

但我想这样写

  34.77
6114.05
 410.70

想好怎么做?

【问题讨论】:

  • 请取消 feof()。它不会做你期望它做的事情。还要了解指针:p_x[x] = f1;*(p_x+x)=f1; 相同,但更易于阅读。
  • 如何取消我不明白的 feof
  • 您应该这样做:while (fgets(s1, sizeof(s1), fr) != 0 &amp;&amp; fgets(s2, sizeof(s2), fr) != 0 &amp;&amp; fgets(s3, sizeof(s3), fr) != 0 &amp;&amp; fscanf(fr, "%d", &amp;c1) == 1 &amp;&amp; fscanf(fr, "%f", &amp;f1) == 1 &amp;&amp; fgets(s4, sizeof(s4), fr) != 0 &amp;&amp; fscanf(fr, "%d", &amp;c2) == 1) pz++; 适当地分布在多行上。或者将输入代码放入一个报告它是否成功的函数中——以避免重复(这很可怕)。始终检查每个输入操作;不要使用feof() 这样做。仅使用feof() 来区分 EOF 和失败时的错误。
  • 将两个fscanf() 调用与一个fscanf_s() 调用混合在一起有点奇怪。形式上没有错误,但不一致和一致性在编程中很重要。
  • 谢谢我没有注意到 fscanf_s()

标签: c arrays pointers stack


【解决方案1】:

顺便说一句,尝试使用 %f 而不是 %lf 作为 f1。编辑:%lf 是双倍的。

【讨论】:

  • 是的,OP prob 正在尝试执行 %1f
【解决方案2】:

%lf 指定读取double,但您尝试将结果存储在大小为一半的float 中。浮点数的说明符只是 %f — 或使用 double;浮点数在现代通用计算机上相当无用。

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2019-09-04
    相关资源
    最近更新 更多