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

C语言中如何检查输入字符长度?解决strlen致程序停滞问题

问题分析与解决方案

先明确你代码里的核心问题:

  • strlen() 要求传入以'\0'结尾的字符串指针,但你定义的temp是单个char变量,并非字符串。调用strlen(temp)时,函数会从temp的内存地址开始盲目向后查找'\0',直接触发越界访问内存的未定义行为,这就是程序停滞的原因。
  • 改成scanf(" %s", &temp)同样错误:%s会读取整段输入字符串(还会自动添加'\0'),但temp只有1字节存储空间,会造成缓冲区溢出,依然是未定义行为。

下面给你两种可靠的解决方法:

方法一:读取整行输入后检查长度

这种方法能完整捕获用户输入,精准判断是否为单个字符:

#include <stdio.h>
#include <string.h>

void nextFunction() {
    // 自定义函数逻辑
    printf("输入有效!\n");
}

int main() {
    char input[100]; // 定义足够大的缓冲区存储输入
    printf("Enter colour: ");
    
    // 读取整行输入(包含换行符)
    if (fgets(input, sizeof(input), stdin) == NULL) {
        printf("输入错误\n");
        return 1;
    }

    // 移除结尾的换行符(如果存在)
    size_t len = strlen(input);
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
        len--;
    }

    // 检查输入长度是否为1
    if (len != 1) {
        printf("Value must only be one character\n");
    } else {
        nextFunction();
    }

    return 0;
}

方法二:读取单个字符后检查剩余输入

如果只需判断是否输入了多于一个字符,这种方式更轻量:

#include <stdio.h>

void nextFunction() {
    // 自定义函数逻辑
    printf("输入有效!\n");
}

int main() {
    char temp;
    char extra;
    printf("Enter colour: ");

    // 读取第一个非空白字符
    if (scanf(" %c", &temp) != 1) {
        printf("输入错误\n");
        return 1;
    }

    // 检查是否存在多余输入(除换行符外)
    if (scanf("%c", &extra) != EOF && extra != '\n') {
        printf("Value must only be one character\n");
    } else {
        nextFunction();
    }

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:15:54