[英]Stack Smashing Detected upon input fgets
目的是输入 string1 和 string2 并从 string1 中删除 string2 中出现的任何字母。 输入第二个字符串后,出现堆栈粉碎检测错误。 函数 rmchr 工作正常。 一旦我们到达 rmstr。
主文件:
#include <stdio.h>
#include "rmstr.h"
int main()
{
int ch, l;
char x[3];
x[0]='y';
while(x[0]=='y'||x[0]=='Y')
{
char string[100]={0}, string1[100]={0}, string2[100]={0}, c[3];
printf("Enter a String: ");
fgets(string, 100, stdin);
if (string[98] == '\n' && string[99] == '\0') { while ( (ch = fgetc(stdin)) != EOF && ch != '\n'); }
printf("Enter a Char: ");
fgets(c, 2, stdin);
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
rmchr(string, c[0]);
printf("Enter a String: ");
fgets(string1, 100, stdin);
if (string1[98] == '\n' && string1[99] == '\0') { while ( (ch = fgetc(stdin)) != EOF && ch != '\n'); }
printf("Enter the second string: ");
fgets(string2, 100, stdin);
if (string2[98] == '\n' && string2[99] == '\0') { while ( (ch = fgetc(stdin)) != EOF && ch != '\n'); }
rmstr(string1, string2);
printf("Run Again?(y/n):");
fgets(x, 2, stdin);
while ( (ch = fgetc(stdin)) != EOF && ch != '\n');
}
return 0;
}
函数.h:
rmchr(char *string, char c)
{
int i=0, j=0, count=0;
char word[100]={0};
int s = strlen(string);
for(i=0; i<=(s-2); i++)
{
if(string[i] != c && string[i] != ' ')
{
word[count] = string[i];
count++;
}
}
printf("Word: ");
for(i=0; i<=count; i++)
{
printf("%c", word[i]);
}
printf("\n");
}
rmstr(char *string1, char *string2)
{
int i=0, j=0, count=0;
char word[100]={0};
int s = strlen(string1);
int l = strlen(string2);
for(i=0; i<=(s-2); i++)
{
for(j=0; j<=(s-2); j++)
{
if(string1[i] != string2[j] && string1[i] != ' ')
{
word[count] = string1[i];
count++;
}
}
}
}
样本输出:
Enter a String: Ahhaha
Enter a Char: h
Word: Aaa
Enter a String: Annabcdcbcdbckje
Enter the second string: n
*** stack smashing detected ***: ./q4 terminated
Aborted (core dumped)
在rmstr
:
for(i=0; i<=(s-2); i++) {
for(j=0; j<=(s-2); j++)
{
if(string1[i] != string2[j] && string1[i] != ' ')
{
word[count] = string1[i];
count++;
}
}
您的count
数值始终在此循环循环中递增,并且可以大于最大允许值99
( word
组的最后一个元素)。 例如,如果s
为 12,则s - 2
* s - 2
将count
为100
。
此外,乍一看,您似乎忘记在第二个循环中使用l
使用s
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.