gpt4 book ai didi

c - 输入 fget 时检测到堆栈崩溃

转载 作者:行者123 更新时间:2023-11-30 19:42:09 24 4
gpt4 key购买 nike

目的是输入 string1 和 string2,并从 string1 中删除 string2 中出现的任何字母。输入第二个字符串后,出现堆栈崩溃检测错误。函数 rmchr 工作正常。一旦我们到达 rmstr。

main.c:

#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 value 在此循环中始终递增,并且可以大于 99 的最大允许值(word 数组的最后一个元素)。例如如果 s是 12,那么 s - 2 * s - 2将给出 count100 .

此外,乍一看,您似乎忘记使用 l在第二个循环中使用 s相反。

关于c - 输入 fget 时检测到堆栈崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32749083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com