堆栈粉碎检测到C.

时间:2014-01-07 10:28:56

标签: c count stack

我制作了这个小程序来计算字符串中有多少'en'。它确实有效,但我得到一个错误,说有检测到堆栈粉碎。我不明白如何解决这个问题......任何人都可以给我一个提示吗?

#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;
}

1 个答案:

答案 0 :(得分:3)

永远不要使用gets(),它容易受到缓冲区溢出的影响。

使用更安全的替代fgets(),如下所示:

char buf[256];

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