#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) ...
#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作為字元串名其實就是地址常量