2014-01-07 67 views
-1

我做了這個小程序來統計一個字符串中有多少'en。它確實有效,但是我收到一個錯誤,說有堆棧被檢測到。我不明白如何解決這個...任何人都可以給我一個小費?堆棧粉碎檢測到C

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


int main(int argc, char *argv[]) 
{ 
char s[30]; 
int getal=0, e, n; 
int i = 0; 

gets(s); 

for (; s[i] != '\0'; i++) { 
    e =(s[i] == 'e'); 
    n =(s[i + 1] == 'n'); 

    if (e && n) 
     getal++; 
} 

printf("Het aantal bedraagt: %i", getal); 

return 0; 
} 
+2

是字符串輸入你超過29個字符?然後'gets'將愉快地寫出超出傳遞數組範圍的方式。有一個原因是'gets'已經從最新的C標準中刪除,使用['fgets'](http://en.cppreference.com/w/c/io/fgets)(或['gets_s'](http:而不是.encppreference.com/w/c/io/gets))。 –

+1

http://stackoverflow.com/questions/1345670/stack-smashing-detected可能會幫助你理解問題 – SoulRayder

+0

我修復了一些特別討厭的縮進問題,所以我們可以從樹上看到木頭。 – Bathsheba

回答

3

千萬不要使用gets(),它很容易發生緩衝區溢出。

使用更安全的替代fgets(),就像這樣:

char buf[256]; 

if(fgets(buf, sizeof buf, stdin) != NULL) 
{ 
    /* process string here */ 
} 
+0

哦,我明白了。我將在未來努力與此合作。謝謝!雖然已經解決了問題。 – jib