随缘之

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
#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作为字符串名其实就是地址常量
posted on 2017-08-11 13:19  随缘之  阅读(572)  评论(0编辑  收藏  举报