C 获取用户输入(按enter键终止)
我使用scanf获取用户输入,但如果按enter键,光标将闪烁到下一行~ 如果我想让用户只按enter键而不键入任何东西,程序将终止,我应该使用什么函数来代替scanfC 获取用户输入(按enter键终止),c,C,我使用scanf获取用户输入,但如果按enter键,光标将闪烁到下一行~ 如果我想让用户只按enter键而不键入任何东西,程序将终止,我应该使用什么函数来代替scanf 谢谢Scanf一直读到下一个标记——它根本不关心换行符(只认为它们是空格,就像空格或制表符一样) 相反,使用一个行读取函数,比如。Scanf会一直读取到下一个标记——它根本不关心换行符(只考虑它们是空格,比如空格或制表符) 相反,使用一个行读取功能,如。我不同意: char * x; scanf("%s",x); printf(
谢谢Scanf一直读到下一个标记——它根本不关心换行符(只认为它们是空格,就像空格或制表符一样)
相反,使用一个行读取函数,比如。Scanf会一直读取到下一个标记——它根本不关心换行符(只考虑它们是空格,比如空格或制表符) 相反,使用一个行读取功能,如。我不同意:
char * x;
scanf("%s",x);
printf("Inserted line: %s\n",x);
在返回键之前,将只在x中存储字符。
我构建并运行了它,它就运行了。我不同意:
char * x;
scanf("%s",x);
printf("Inserted line: %s\n",x);
在返回键之前,将只在x中存储字符。
我构建并运行了它,它就工作了。只需使用以下代码:
char ch;
printf("Enter Your Sentence \n");
while (1)
{
ch = getch();
if ((int)ch == 13)
break;
printf("%c", ch);
}
只需使用以下代码:
char ch;
printf("Enter Your Sentence \n");
while (1)
{
ch = getch();
if ((int)ch == 13)
break;
printf("%c", ch);
}
可以通过以下方式使用get()函数:
#include <stdio.h>
#define MAX_INPUT_CHAR 100
int main( ) {
char str[MAX_INPUT_CHAR ];
printf( "Enter a value :");
gets( str );
return 0;
}
#包括
#定义最大输入字符100
int main(){
字符str[MAX_INPUT_char];
printf(“输入值:”);
获取(str);
返回0;
}
函数char*获取(char*s)将stdin中的一行读取到
直到终止换行符或EOF(文件结束)
注意,这是不安全的。你现在无法预知它将读取多少字符。这可能会导致一些安全问题并最终崩溃。您可以通过以下方式使用get()函数:
#include <stdio.h>
#define MAX_INPUT_CHAR 100
int main( ) {
char str[MAX_INPUT_CHAR ];
printf( "Enter a value :");
gets( str );
return 0;
}
#包括
#定义最大输入字符100
int main(){
字符str[MAX_INPUT_char];
printf(“输入值:”);
获取(str);
返回0;
}
函数char*获取(char*s)将stdin中的一行读取到
直到终止换行符或EOF(文件结束)
注意,这是不安全的。你现在无法预知它将读取多少字符。这可能会导致一些安全问题并最终崩溃。嗯,这给了我一个分段错误。首先,传递到
scanf
的指针需要初始化为指向某个地方,否则scanf将尝试写入随机内存单元并使程序崩溃。第二,永远不要使用scanf(“%s”,…)
。如果您确实初始化了x
,您会分配多少字节?您不可能知道用户将提供多少字节,因此他们总是可以使用它来崩溃您的程序,或者更糟。最后,scanf直到返回键时才获取字符,它获取第一个单词。如果第一行没有单词,它将在下一行等待。不,它没有。我跑了。第二点:我们讨论的不是内存管理,而是如何获取字符串。所以没有必要教我如何安全地处理记忆<代码>#include int main(int argc,char*argv[]){int a;char*x;scanf(“%s”,x”);printf(“插入行:%s\n,x”);scanf(“%d”,&a);return 0;}尝试构建一个运行它的程序。我不知道该告诉你什么,伙计。。。当你键入一个单词并点击return时,这个程序就会崩溃(如果你不键入一个单词,它会一直等到你键入为止……这就是问题中提出的问题)。它不可能不崩溃,因为您要求scanf写入x
,但尚未为其分配任何内存。处理字符串确实需要以安全的方式处理内存。我保证任何使用scanf(“%s”,…)
的程序都容易受到缓冲区溢出的攻击,这意味着攻击者可以接管计算机。这是一个非常危险的安全漏洞。我一直在试图弄清楚它是如何为您“工作”的。你有机会使用DOS吗?在DOS或类似的旧操作系统(也包括Mac OS 9)中,没有分段错误,只有内存损坏。在这种情况下,它可以正常工作而不会崩溃,但它仍然非常糟糕——它可能会随机写入部分操作系统或其他程序,例如。嗯,这给了我一个分段错误。首先,传递到scanf
的指针需要初始化为指向某个地方,否则scanf将尝试写入随机内存单元并使程序崩溃。第二,永远不要使用scanf(“%s”,…)
。如果您确实初始化了x
,您会分配多少字节?您不可能知道用户将提供多少字节,因此他们总是可以使用它来崩溃您的程序,或者更糟。最后,scanf直到返回键时才获取字符,它获取第一个单词。如果第一行没有单词,它将在下一行等待。不,它没有。我跑了。第二点:我们讨论的不是内存管理,而是如何获取字符串。所以没有必要教我如何安全地处理记忆<代码>#include int main(int argc,char*argv[]){int a;char*x;scanf(“%s”,x”);printf(“插入行:%s\n,x”);scanf(“%d”,&a);return 0;}尝试构建一个运行它的程序。我不知道该告诉你什么,伙计。。。当你键入一个单词并点击return时,这个程序就会崩溃(如果你不键入一个单词,它会一直等到你键入为止……这就是问题中提出的问题)。它不可能不崩溃,因为您要求scanf写入x
,但尚未为其分配任何内存。处理字符串确实需要以安全的方式处理内存。我保证任何使用scanf(“%s”,…)
的程序都容易受到缓冲区溢出的攻击,这意味着攻击者可以接管计算机。这是一个非常危险的安全漏洞。我一直在试图弄清楚它是如何为您“工作”的。你有机会使用DOS吗?在DOS或类似的旧操作系统(也包括Mac OS 9)中,没有分段错误,只有内存损坏。在这种情况下,它可以在不崩溃的情况下工作,但仍然非常糟糕——它可以随机写入部分运算符