【发布时间】:2020-01-10 18:17:40
【问题描述】:
当我尝试在这段代码上使用 Cprogramm 时出现分段错误,我不知道为什么。代码的目标是创建 mini-files.dat,其中包含 nomi.txt 中的人名 + 一个指示 -(负)值是否 > soglia(我在 main 中设置 soglia)的标志。 nomi.txt 是这样的文件:
Mike 12 -16 90
Carl 23 -40 -42
Jonh 18 5 40
Bob -90 12 16
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char stringa[30];
void creaFile(stringa nome,int flag){
FILE *fp=fopen(nome,"a+");
fprintf(fp,"[%s][%d]\n",nome,flag);
fclose(fp);
}
void creaBinarioNegativi(int soglia){
FILE* fp = fopen("nomi.txt","r+");
stringa nome;
int flag=0;
int cont=0;
int valore1=0;
int valore2=0;
int valore3=0;
while(!feof(fp)){
if(fscanf(fp,"%s %d %d %d",nome,valore1,valore2,valore3)!=EOF){
if(valore1<0) {
cont++;
}
else if(valore2<0){
cont++;
}
else if(valore3<0){
cont++;
}
if(cont>=soglia){flag=1;}
creaFile(nome,flag);
}
}
fclose(fp);
}
void main(){
int soglia = 2;
creaBinarioNegativi(soglia);
}
【问题讨论】:
-
您应该检查
fopen(etc) 错误。 -
您能否至少将您的调试器附加到程序中并给我们追溯错误发生的位置?
-
顺便说一句,请确保标签与问题有合理的关系。如果您的问题是特定于 bash 的,
bash标记将是有意义的(当您从任何其他 shell 运行 C 程序时不会发生错误),但否则就没有任何意义。同样,当问题在其他操作系统上没有发生时使用linux标签(或者至少当您的程序在使用 Linux 特定工具时遇到错误时),当它在其他操作系统上没有发生时使用gcc标签编译器(或发生在使用 gcc-only pragma 的代码中)等 -
void main()不太正确。 C 中的标准 main 函数应该返回一个 int(int main (void)或int main(int argc, char **argv)) -
清理代码警告。他们准确地告诉你问题出在哪里(如下面的答案所述)。
标签: c