C语言统计字符串大小写字母、数字的程序无法运行是什么原因
C语言字符串字符统计代码报错修复
代码存在5处核心错误,直接导致运行崩溃、统计结果不准:
- 函数传参非法:
statistics第一个参数需要传入字符数组首地址,代码传入&str[size],这是数组边界外的非法内存地址,访问时会直接触发内存访问错误。 - 安全函数调用不符合规范:
gets_s要求传入两个参数,分别是缓冲区地址、缓冲区最大长度,代码仅传入数组名,触发参数校验失败。 - 遍历逻辑错误:循环固定遍历50个数组元素,没有在字符串结束符
\0位置停止,会读取数组内未初始化的垃圾值参与统计,结果完全失真。 - 字符判断逻辑写错:数字统计分支误用
isalpha()(判断是否为字母的函数),正确的数字判断函数为isdigit()。 - 判断分支逻辑错位:三个判断用
else if串联时,把字母判断归到数字计数分支,就算函数用对也会出现统计值完全错误的问题。
修正后可运行代码
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #define size 50 void statistics(char str[], int *lower, int *upper, int *digits) { for (int i = 0; str[i] != '\0'; i++) { if (islower(str[i])) { (*lower)++; } else if (isupper(str[i])) { (*upper)++; } else if (isdigit(str[i])) { (*digits)++; } } } int main() { char str[size] = {0}; int upper = 0, lower = 0, digits = 0; printf("Enter a string:\n"); gets_s(str, size); statistics(str, &lower, &upper, &digits); printf("Lower: %d\nUpper: %d\nDigits: %d", lower, upper, digits); return 0; }
原运行报错截图

内容的提问来源于stack exchange,提问作者May Swisa
相关产品推荐
相关产品推荐

