码迷,mamicode.com
首页 > 其他好文 > 详细

字符串的输入scanf 和gets

时间:2017-08-11 14:44:50      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:scanf   nat   占用   argc   字符   []   字符串   位置   define   

#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()是将输入的字符串全部输入,这样就会造成如果输
入的字符串的长度大于定义的内存就会占用非法的内存空间
linux@ubuntu:~/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   nat   占用   argc   字符   []   字符串   位置   define   

原文地址:http://www.cnblogs.com/cwx930107/p/7345462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!