我想写一个if-else语句来检查输入的字符长度是否为1。
char temp;
printf("Enter colour: ");
scanf(" %c", &temp);
if (strlen(temp) > 1) {
printf("Value most only be one character");
}
else {
nextFunction();
}
但是,在这里使用strlen()会使我的程序停止,我不知道为什么。我也试着将第三行改为scanf(" %s", &temp)
,但这也不起作用。否则我怎么检查和处理字符输入的长度呢?
1条答案
按热度按时间ohfgkhjo1#
你正在阅读和存储一个字符的定义。
char
类型的变量存储单个字符值-'A'
、'\n'
、'5'
等。您的
scanf
调用只读取一个字符-格式字符串" %c"
告诉scanf
跳过任何空格并读取下一个非空格字符,该字符存储到temp
中。strlen
调用被放大了,因为它期望参数是一个指向以0结尾的字符串的第一个字符的指针,基本上是一个地址,没有一个字符值是有效的指针值。在这种情况下,
strlen
调用是不必要的-您真正需要做的是检查scanf
的返回值,以确保输入操作成功。scanf
将返回成功读取和赋值的输入项的数量,或者EOF
在文件结尾或出现错误:如果要存储一个 string,则需要创建一个
char
的 array:这是不安全的--如果您输入的字符串超过了数组所能容纳的尺子,那么这些多余的字符将被写入到数组后面的内存中,从而可能会覆盖一些重要的内容。
通过在格式说明符中指定最大宽度,可以使其更安全:
但是它必须是硬编码的--你不能像
printf
那样使用运行时参数。你可以创建一个预处理器宏来扩展到"%20s"
(或者你设置的MAX_STRING_LENGTH
):但使用
fgets
更安全、更容易:这里唯一的问题是,如果有空间,
fgets
会将尾部换行符存储到数组中,所以您必须以某种方式处理它: