You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:12:28