首页 > 解决方案 > 错误:变量“m”周围的堆栈已损坏

问题描述

我试图制作一个程序,说明特定数字出现在 100 个数字序列上的次数。同时我得到了这个错误,我不明白这个问题的解决方案是什么。如果您能给我一些提示或解决方案,我将不胜感激。

#include <stdio.h>

int main() {
int i, m, digit, val[99], count=0;

printf("Enter a number:");
scanf("%d", &val[0]);
while (val[0] < 0) {
    printf("Enter a number:");
    scanf("%d", &val[0]);
}

for (i=1;i<101;i++) {
    val[i]=val[0]++;
    printf("%d\n", val[i]);
}

printf("Enter a digit:");
scanf("%d", &m);
while (m<0||m>9) {
    printf("Enter a digit:");
    scanf("%d", &m);
}

do {
    digit=val[i]%10;
    val[i]=val[i]/10;
    if (digit==m) {
        count++;
    }
}while (val[i]>0);

printf("The digit %d is printed %d times in this sequence.", m, count);

}

标签: cvariables

解决方案


在 for 循环中,您将跳出数组val,其中最后一个索引是 98。与其在几个地方硬编码数组的长度,不如使用长度宏更方便,如下所示:

#define LEN(anArray) (sizeof (anArray) / sizeof (anArray)[0])
...
for (i = 1; i < LEN(val); i++) {
...

此外,在 do-while 循环中,索引i在val的数组边界之外。您还需要检查scanf的返回值以确保输入有效。最后一个printf语句还需要一个尾随换行符。

编辑:请注意,LEN仅处理“真实”数组;传递给函数的数组作为指针接收。


推荐阅读