gpt4 book ai didi

c - 获取错误段错误

转载 作者:行者123 更新时间:2023-11-30 17:39:35 28 4
gpt4 key购买 nike

我的程序工作正常,但有一个奇怪的错误...输入的最后一行不能为空,否则会抛出错误 Segmentation failure (core dumped)...知道为什么会发生这种情况吗?

这是我的代码:

#include<stdlib.h>
#include <stdio.h>
#include <string.h>
#define NUM 25
#define LEN 1000
int stringCompare(char str1[],char str2[]);
void stringCopy(char str1[],char str2[]);

int main()
{
char tmp[25];
int i=0,j=0;
char Strings[NUM][LEN];

printf("enter %d strings, one at a time:\n", NUM);

for(i=0;i<NUM;++i)
{
printf("String %d : ",(i+1));
fgets(Strings[i],LEN-2,stdin);
}

puts("these are the strings you entered:");

for(i=0;i<NUM;++i)
{
printf("%s",Strings[i]);
}

for(i=1;i<NUM;i++)
{
for(j=0;j<NUM-1;j++)
{
if(stringCompare(Strings[j],Strings[j+1]) > 0)
{
stringCopy(tmp,Strings[j]);
stringCopy(Strings[j],Strings[j+1]);
stringCopy(Strings[j+1],tmp);
}
}
}

/* Output sorted list */
puts("These are the strings alphabetical order:");
for(i=0;i<NUM;i++)
{
printf("%s",Strings[i]);
}
return 0;
}

int stringCompare(char str1[],char str2[]){
int i=0,flag=0;
while(str1[i]!='\0' && str2[i]!='\0')
{
if(str1[i]!=str2[i]){
return str1[i] - str2[i];
}
i++;
}
return 0;
}

void stringCopy(char str1[],char str2[]){
int i=0;
while(str2[i]!='\0'){
str1[i] = str2[i];
i++;
}

str1[i]='\0';
}

最佳答案

我在上面的代码中看到的一个问题是,您有一个最大长度为 1000 的字符串数组,并且您使用临时数组来交换它们,但是临时数组的大小为 25,您可能会尝试将长度为 1000 的字符串复制到其中,导致缓冲区溢出。

tmp[25];

应该是

tmp[LEN];

如果您输入的字符串中至少有一个超过 23 个字符('\0''\n' 减去 2,您的程序可能会显示将这些长字符串之一复制到 tmp 时出现未定义的行为。

关于c - 获取错误段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21766979/

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