c - 错误:变量“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);
}
解决方案
在 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仅处理“真实”数组;传递给函数的数组作为指针接收。
推荐阅读
- javascript - ng-if 不在 AngularJS 中显示数据
- java - 几天后寻找效率建议
- angular - JWT 在 Express 和 Angular 应用程序中立即过期
- c++ - 在 GCC 中避免或警告从 const char* 到 bool 的隐式转换
- html - 为什么导航栏下拉菜单不垂直对齐?
- keras - 如何将 CNN 模型配置保存到文件
- sql - Kubernetes 并将数据从 SQL 获取到不同的服务器
- php - PHP:在 Ajax 请求中找不到页面 404
- javascript - Select Field OnChange, Make Show/Hide, Shows Initially but Once Gone, Cant ReShow
- android - 可折叠视图不适用于 viewpager