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

C语言不使用string.h/ctype.h如何获取用户输入字符的实际长度

问题解答

代码问题根源

  • sizeof是C语言的编译期运算符,计算的是变量本身占用的内存字节数,和实际输入的内容完全无关:单个char变量固定占1字节,所以输出结果永远是1;长度为10的char数组固定占10字节,所以输出结果永远是10。
  • scanf("%c")只能读取1个字符,本身就不支持统计多字符输入的长度;scanf("%s")虽然可以读取字符串,但你没有额外统计字符串的有效字符数量。

解决方案(不使用<string.h>、<ctype.h>)

方案1:存储输入内容后自行统计长度

如果需要保留用户输入的内容,可以用数组存储后遍历计数:

int main(void)
{
    // 多开1位空间存储字符串结束标记'\0',最多可存10个有效字符
    char character[11];
    int len = 0;
    printf("Introduce maximum 10 characters: ");
    // 限制最多读取10个字符,避免输入溢出引发内存问题
    scanf("%10s", character);
    // 遍历到结束标记'\0'就停止,累计的数值就是有效字符数
    while(character[len] != '\0') {
        len++;
    }
    printf("\nSize of input: %d", len);

    return 0;
}

方案2:逐字符读取直接计数

如果不需要保留输入内容,只需要统计数量,可以读取的同时计数,还能支持统计空格、换行等%s无法识别的字符:

int main(void)
{
    char c;
    int count = 0;
    printf("Input characters, press Enter to finish: \n");
    // 读到换行符时停止计数,也可根据需求调整停止条件
    while(scanf("%c", &c) == 1 && c != '\n') {
        count++;
    }
    printf("Input length: %d", count);
    return 0;
}

补充说明

C语言中所有字符串默认以'\0'(ASCII值为0的空字符)作为结束标记,统计字符串长度的逻辑就是从第一个字符开始计数,直到遇到'\0'为止,这也是方案1中数组需要多开1位存储空间的原因。

内容的提问来源于stack exchange,提问作者mexicanburrito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:54:02