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
相关产品推荐
相关产品推荐

