字符串的输入scanf 和gets,字符串scanfgets


#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作为字符串名其实就是地址常量

相关内容

    暂无相关文章