Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我在这段代码中有分段错误?_C - Fatal编程技术网

C 为什么我在这段代码中有分段错误?

C 为什么我在这段代码中有分段错误?,c,C,当我尝试在这段代码上使用cprogram时,我出现了一个分段错误,我不知道为什么。代码的目标是创建mini-files.dat,其中包含nomi.txt中的人名+一个标志,该标志指示-(neagative)值是否>soglia(我在main中设置了soglia)。nomi.txt是如下所示的文件: Mike 12-16 90 卡尔23-40-42 乔恩18540 鲍勃-90 12 16 代码如下: #包括 #包括 #包括 typedef char stringa[30]; void creaF

当我尝试在这段代码上使用cprogram时,我出现了一个分段错误,我不知道为什么。代码的目标是创建mini-files.dat,其中包含nomi.txt中的人名+一个标志,该标志指示-(neagative)值是否>soglia(我在main中设置了soglia)。nomi.txt是如下所示的文件:

Mike 12-16 90
卡尔23-40-42
乔恩18540
鲍勃-90 12 16
代码如下:

#包括
#包括
#包括
typedef char stringa[30];
void creaFile(stringa nome,int标志){
文件*fp=fopen(命名为“a+”);
fprintf(fp,[%s][%d]\n],nome,flag);
fclose(fp);
}
void creaBinarioNegativi(国际索格利亚){
文件*fp=fopen(“nomi.txt”、“r+”);
野丝线;
int标志=0;
int cont=0;
从价税1=0;
从价税2=0;
从价税3=0;
而(!feof(fp)){
如果(fscanf(fp,“%s%d%d%d”,名词,从价1,从价2,从价3)!=EOF){
如果(从价1该行错误:

if(fscanf(fp,"%s %d %d %d",nome,valore1,valore2,valore3)!=EOF){
参数应该是变量的地址。请注意,
nome
已经是地址,因为数组会衰减为指针

修正:


您应该检查
fopen
(etc)错误。您是否至少可以将调试器附加到程序,并向我们提供错误发生位置的回溯?顺便说一句,请确保标记与问题有合理的关系。如果您的问题特定于bash,则
bash
标记将有意义(当您从任何其他shell运行C程序时不会发生错误),但在其他情况下没有任何意义。类似地,当问题在其他操作系统上没有发生时(或者至少当您的程序在使用linux特定工具时遇到错误时),请使用
linux
标记,当
gcc
标记不出现在其他编译器上时(或者只出现在使用gcc pragmas的代码中),等等
void main()
不是很正确。C中的标准main函数应该返回int(或者
int main(void)
或者
int main(int argc,char**argv)
)清理代码警告。它们准确地告诉您问题所在(如下面的答案所述)。
if(fscanf(fp,"%s %d %d %d",nome,&valore1,&valore2,&valore3)!=EOF){