如何在 C 中使用 scanf() 检查输入字符数组 (%s) 的长度

How to check the length of input char array (%s) using scanf() in C

我需要使用函数 scanf() 检查输入的长度。 我正在使用一个字符数组 (%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”。

在这种情况下如何检查输入的长度? 谢谢。

sizeof 是一个编译时一元运算符,可用于计算它的大小 operand.if 你想计算你必须使用的字符串的长度 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;
}

to check the length of input char array (%s) using scanf()

  • 不要使用原始 "%s",使用 宽度 限制:比缓冲区大小小 1。

  • 使用足够大小的缓冲区。 char chr[] = ""; 只是 1 char.

  • 当输入不读取空字符.

    时,使用strlen()确定字符串长度
      char chr[100];
      if (scanf("%99s", chr) == 1) {
        printf("Length: %zu\n", strlen(chr));
      }
    
  • 迂腐:如果代码可能读取 空字符 ,请使用 "%n" 存储扫描的偏移量(这种情况很少见或经常遇到)。

      char chr[100];
      int n1, n2;
      if (scanf(" %n%99s%n", &n1, chr, &n2) == 1) {
        printf("Length: %d\n", n2 - n1);
      }