字符串的输入scanf 和gets

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串的输入scanf 和gets相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<string.h>
#define N 100
int main(int argc, const char *argv[])
{
char str1[N];
char str2[N];
①scanf("%s",str1);
②gets(str1);
printf("%s\n",str1);
return 0;
}
 
①这种情况如果是打印Hello World这种中间位置有空格的字符串会出现只打印Hello的情况,
因为scanf函数中,只有%c才能打印空格这样的字符,而%s是不认识空格这样的字符型常量
②gets()这个函数就没有以上的顾虑,但是不建议使用这样的输入方法,#define N 100这里
定义的是字符串能够占用的内存,gets()是将输入的字符串全部输入,这样就会造成如果输
入的字符串的长度大于定义的内存就会占用非法的内存空间
[email protected]:~/cwx$ ./zifuchuan1
i am student!!! i come from yancheng
i am student!!! i come from yancheng
*** stack smashing detected ***: ./zifuchuan1 terminated
(stack smashing detected是分配的空间不足的提示)
 
另外还有一个注意点就是scanf("%s",str1)与之前输入的方式不同的是字符串在输入的时候是不
需要加上&这样的取地址符,因为str1作为字符串名其实就是地址常量

以上是关于字符串的输入scanf 和gets的主要内容,如果未能解决你的问题,请参考以下文章

scanf() 与 gets()--转载

C语言字符型二维数组用scanf和gets如何输入,举个例谢谢

getchar(),gets(),scanf()的差异比较

关于scanf 与 cin gets(),getline()......输入输出字符串的区别

C语言 gets()和scanf()函数的区别

字符串输入 gets(s)与 scanf("%s",&s)