我需要使用函数scanf()
检查输入的长度。我正在使用一个char (%s)数组来存储输入,但是我无法检查这个输入的长度。
下面是代码:
#include <stdio.h>
char chr[] = "";
int n;
void main()
{
printf("n");
printf("Enter a character: ");
scanf("%s",chr);
printf("You entered %s.", chr);
printf("n");
n = sizeof(chr);
printf("length n = %d n", n);
printf("n");
}
它返回给我长度n = 1;查看我尝试过的每种情况的输出
在这种情况下,我如何检查输入的长度?谢谢你。
使用scanf()检查输入字符数组(%s)的长度
-
不使用原始
"%s"
,使用宽度限制:1小于缓冲区大小。 -
使用足够大小的缓冲区。
char chr[] = "";
只有1个char
-
当输入不读取空字符时,使用
strlen()
确定字符串长度。char chr[100]; if (scanf("%99s", chr) == 1) { printf("Length: %zun", strlen(chr)); }
-
Pedantic:使用
"%n"
来存储扫描码可能读取空字符的偏移量(这种情况很少或不常见)。char chr[100]; int n1, n2; if (scanf(" %n%99s%n", &n1, chr, &n2) == 1) { printf("Length: %dn", n2 - n1); }
sizeof
是编译时一元操作符,可用于计算其操作数的大小。如果你想计算字符串的长度,你必须使用strlen()
.像这样
#include <stdio.h>
#include <string.h>
int main()
{
char Str[1000];
printf("Enter the String: ");
if(scanf("%999s", Str) == 1) // limit the number of chars to sizeof Str - 1
{ // and == 1 to check that scanning 1 item worked
printf("Length of Str is %zu", strlen(Str));
}
return 0;
}