For循环分配溢出到另一个变量[重复]

Posted

技术标签:

【中文标题】For循环分配溢出到另一个变量[重复]【英文标题】:For loop assignments overflow into another variable [duplicate] 【发布时间】:2014-09-12 15:57:19 【问题描述】:

我正在尝试使用 for 循环将值分配给 C 中的数组(我正在使用 minGW)。起初我尝试做:

double flag[5] = 0.1;

但这只是将数组中的第一个变量分配给 0.1。然后我尝试做一个 for 循环来单独分配每个。我不想硬编码的原因是因为我希望标志变量的大小能够灵活地适应用户的输入。我当前的代码如下所示:

    int cnt;
    double flag[5];
    for (cnt = 0; cnt < sizeof(flag); cnt++) 
        printf("sizeof(flag) is %d\n",sizeof(flag));
        printf("size is equal to %d and cnt is %d\n",size,cnt);
        flag[cnt] = 0.1;
    
    printf("size is equal to %d\n",size);

变量 "size" 从之前确定的 6 变为垃圾号,我无法修改迭代次数。例如,如果我设置cnt &lt; sizeof(flag)-1,则没有任何变化。 -2,-5, 等没有变化。但是,如果我大幅减小尺寸,它就会陷入无限循环。 sizeof(flag) 是 40,而不是我想要的 5,但除以 8 也会以某种方式使其陷入无限循环。有什么建议吗?

这个问题已经回答了,谢谢大家!

【问题讨论】:

再次阅读 sizeof 的作用。 编辑后的代码在这里可以正常工作。你的代码的输出是什么? 【参考方案1】:

flag数组的元素个数不是:

sizeof (flag)

但是

sizeof flag / sizeof *flag

前者是数组的字节大小,后者是数组的字节大小除以数组一个元素的字节大小。

【讨论】:

【参考方案2】:

改变:

for (cnt = 0; cnt < sizeof(flag); cnt++) 

for (cnt = 0; cnt < sizeof(flag)/sizeof(double); cnt++) 

【讨论】:

【参考方案3】:

使用

    for (cnt = 0; cnt < sizeof flag / sizeof *flag; cnt++)



【讨论】:

【参考方案4】:

sizeof() 返回 5*sizeof(double) 变量所需的字节数。所以你的循环运行超过 5 次导致溢出。

除了前面答案中建议的解决方案外,您还可以使用一个宏来确定数组的大小,并使用这个宏并运行循环直到该值。

 #define SIZE 5
 .
 .
 .
 int cnt;
 double flag[SIZE];
 for (cnt = 0; cnt < SIZE; cnt++) 
      printf("sizeof(flag) is %d\n",sizeof(flag));
      printf("size is equal to %d and cnt is %d\n",size,cnt);
      flag[cnt] = 0.1;
 
 printf("size is equal to %d\n",size);

【讨论】:

以上是关于For循环分配溢出到另一个变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在for循环中分配代表的问题[重复]

从 for 循环 matlab 内部生成的变量分配向量值

增强的 for 循环不适用于将值分配给数组(Java)[重复]

如何使用for循环将返回值分配给变量

在 for 循环中创建几个 tkinter 小部件并将它们分配给变量

变量作为for循环中的日期[重复]