我试图让用户输入一个字符串,这样我就会打印字符串的长度.我的代码构建成功.但是,当我输入一个单词并按下'enter'时,程序继续运行.我必须输入第二个单词,然后显示第一个字符串的长度.我对argv感到困惑[1].有人可以给我一些提示并暗示如何解决这个问题吗?在此先感谢您的时间.
请注意,我不允许使用任何字符串功能.
int main(int argc, char* argv[]){
char* s=argv[1];
char input[256];
s = input;
printf("Please enter a string: ");
scanf("%s\n", s);
int str_length = 0;
while (s[str_length] != '\0')
{
str_length++;
if (s[str_length] == '\0') break;
}
printf("%d\n", str_length);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
argv[]是保存命令行参数的数组,argv[1]是第一个(argv[0]当然不是命令表示本身).你分配它s然后立即覆盖s,所以这里不需要它.
您必须输入两行的原因是\n输入格式的末尾.它需要任何可以匹配格式字符串后跟换行符的内容,因此%s\n正在吃第一个换行符,因此scanf必须返回另一个换行符.
%s它自己会解决这个问题,但如果你所追求的是一整行输入,它会引入另一个问题- 它只会读到第一个空格.有关正确的线路输入功能,请参见此处.
它可以进行全线输入,防止缓冲区溢出和检测/清除太长的行,这在scanf("%s")输入法中是非常缺失的.
另外,这里的if语句在while这里是多余的,因为它while本身将捕获字符串的结尾,并且将两者都引用input并s引用相同的数组没有意义(如果你在某些时候改变了它会有意义s,但那不是发生在这里).
因此,没有高级线路输入功能的变体可能很简单:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char* argv[]) {
char input[256];
int str_length = 0;
printf ("Please enter a string: ");
scanf ("%s", input);
while (input[str_length] != '\0') /* Or consider using strlen() */
str_length++;
printf ("%d\n", str_length);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你输入Hello,你会看到它5立即打印出来.您还将看到5是否输入Hello Pax,这是选择高级输入功能的一个原因(另一个非常重要的原因是避免在程序中引入缓冲区溢出漏洞).