計算字符串中最後一個單詞長度,單詞以空格隔開數組
//計算字符串最後一個單詞的長度,單詞以空格隔開。 #include<stdio.h> #include<string.h> int main() { char str[5000]; gets(str); int count=0; int len=strlen(str); for(int i=(len-1);i>=0;i--) { if(str[i]!=' ') { count++; } else { break; } } printf("%d\n",count); return 0; }
此代碼雖然能運行,可是此函數有一個bug,gets函數:沒有指定輸入字符的大小,限制輸入緩衝區的大小,若是輸入的字符大於定義的數組長度,會發生內存越界,堆棧溢出。後果很是怕怕函數
修改代碼以下:spa
//計算字符串最後一個單詞的長度,單詞以空格隔開。 #include<stdio.h> #include<string.h> int main() { char str[5000]; fgets(str,5000,stdin); int count=0; int len=strlen(str); for(int i=(len-2);i>=0;i--) { if(str[i]!=' ') { count++; } else { break; } } printf("%d\n",count); return 0; }
fgets函數會指定大小,若是超出數組大小,會自動根據定義數組的長度截斷。code
還有一點,上面代碼中標紅部分blog
for(int i=(len-2);i>=0;i--)
爲何i = (len -2)內存
由於fgets函數自己會把回車換行符存入了字符串裏。因此實際讀入的字符串會多一個回車換行符,故字符串
i=(len-2)