如何使用scanf函数获取字符串长度

如何使用scanf函数获取字符串长度,c,string,scanf,C,String,Scanf,如何在不使用strlen函数或计数器的情况下获取字符串长度,如: scanf("???",&len); printf("%d",len); 投入:abcde 预期输出:5您可以使用n说明符执行此操作: %n返回到目前为止读取的字符数 char-str[20]; 内伦; 扫描%s%n,&str,&len; 使用%n格式说明符获取到目前为止使用的字符数,并将其写入int类型的len: 您可以使用赋值抑制字符*和%n,它们将消耗的字符数存储到int值中

如何在不使用strlen函数或计数器的情况下获取字符串长度,如:

scanf("???",&len);
printf("%d",len);
投入:abcde


预期输出:5

您可以使用n说明符执行此操作:

%n返回到目前为止读取的字符数

char-str[20]; 内伦; 扫描%s%n,&str,&len; 使用%n格式说明符获取到目前为止使用的字符数,并将其写入int类型的len:


您可以使用赋值抑制字符*和%n,它们将消耗的字符数存储到int值中:

 int count;
 scanf( "%*s%n", &count );
 printf( "string length: %d\n", count );
说明:

%*s将解析一个字符串,直到第一个空格字符,但由于*的原因,它不会存储该字符串。 然后%n将存储使用的字符数,即解析为count的字符串长度

请注意%n不一定计入scanf的返回值:

C标准规定:执行%n指令不会增加执行完成时返回的赋值计数,但勘误表似乎与此相矛盾。可能明智的做法是不要对%n转换对返回值的影响进行任何假设

引用自您将找到有关scanf的所有其他内容的地方。

说明:此处[]用作扫描集字符,并且^\n使用空格输入,直到遇到新行为止。对于整个字符串的长度计算,我们可以在C中使用标志字符,其中%n不需要任何内容,相反,到目前为止从输入消耗的字符数通过下一个指针存储,该指针必须是指向int的指针。这不是转换,尽管可以用*标志抑制。此处加载相应参数所指向的变量,该变量的值等于在出现%n之前scanf已扫描的字符数

通过使用这种技术,我们可以在运行时加速程序,而不是使用strlen或On count循环

scanf("%[^\n]%n",str,&len);
printf("%s %i",str,len);

谢谢你的回复。我刚刚忘记了%n。scanf语句也可以这样做
scanf("%[^\n]%n",str,&len);
printf("%s %i",str,len);