gpt4 book ai didi

c - "Abort trap: 6"在Mac上运行C程序

转载 作者:太空宇宙 更新时间:2023-11-04 08:25:09 25 4
gpt4 key购买 nike

我对这个程序有疑问。当我尝试在我的 Mac 上运行它时,它返回“Abort trap: 6”。我无法理解原因。

下面是我用来测试程序的文件内容。

aaabccdegags
bbbbbbbcados
vbaiusbyabtd
aisybavsitvc
asindvsivati
ammaccabanan

您应该将这些无意义的字符串复制到文本文件 file.txt 中,然后在命令提示符下使用以下语法调用它:

program.exe file.txt r

其中 file.txt 包含无意义的字符串,r 是它应该在文本文件中查找的字母。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define R 24
#define C 71

int main(int argc, char * argv[]) {

if (argc!=3){
printf("Errore acquisizione parametri\n");
return -1;
}

FILE*fp;
char m[R][C],c,posizione[10];
int i,j,lstr,numrighe,quante,quantemax,posiz,x,y,maxmax;

maxmax=0;

//posiz=1 se orizzontale

quantemax=0;

sscanf(argv[2],"%c",&c);

fp=fopen(argv[1],"r");

if (fp==NULL){
printf("Errore apertura file\n");
return -3;
}

for (i=0;i<R && (!feof(fp));i++){
fgets(m[i],C,fp);
}

fclose(fp);

lstr=strlen(m[0]);

numrighe=i;

for (i=0;i<lstr;i++){

quante=0;

for (j=0;j<numrighe;j++) {
if (m[i][j]==m[i][j+1]){
quante++;
if (quante>quantemax){
quantemax=quante;
if (quantemax>maxmax){
y=i;
x=j;
posiz=1;
}
}
}
}
}

for (i=0;i<lstr;i++){

quante=0;

for (j=0;j<numrighe;j++) {
if (m[i][j]==m[i+1][j]){
quante++;
if (quante>quantemax){
quantemax=quante;
if (quantemax>maxmax){
y=i;
x=j;
posiz=0;
}
}
}
}
}

if (posiz==1){
strcpy(posizione,"orizzontale");
}

else {
if (posiz==0){
strcpy(posizione,"verticale");
}
}


printf("La stringa con il maggior numero di %c consecutive, si trova in %s a partire dalla posizione %d,%d",c,posizione,x,y);

return 0;
}

最佳答案

我没有使用给定的输入运行您的代码,但如果没有它,看起来您的代码将面临 UB。在声明的情况下

 strcpy(posizione,"orizzontale");

源字符串的长度超出了目标字符串的长度。它试图写过分配的内存,这又会调用 undefined behaviour .

关于c - "Abort trap: 6"在Mac上运行C程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30890156/

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