計算字符串中最后一個單詞長度,單詞以空格隔開
//計算字符串最后一個單詞的長度,單詞以空格隔開。 #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函數:沒有指定輸入字符的大小,限制輸入緩沖區的大小,如果輸入的字符大於定義的數組長度,會發生內存越界,堆棧溢出。后果非常怕怕
修改代碼如下:
//計算字符串最后一個單詞的長度,單詞以空格隔開。 #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函數會指定大小,如果超出數組大小,會自動根據定義數組的長度截斷。
還有一點,上面代碼中標紅部分
for(int i=(len-2);i>=0;i--)
為什么i = (len -2)
因為fgets函數本身會把回車換行符存入了字符串里。所以實際讀入的字符串會多一個回車換行符,故
i=(len-2)