很抱歉在这么晚的时间问这个问题,但是第二天我的作业到期了,这只是我所提出的七个问题中的第一个。我的导师和讲师没有回应我的呼救声和我已经被困在它上面几天了。我知道分段错误通常意味着某处存在非法内存访问,但我无法弄清楚它为何会发生。我已经分配了内存,它似乎发生在fseek区域,因为如果我在fseek()
之后对整个块进行评论,则没有分段错误。
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"sys/types.h"
#include"sys/stat.h"
#include"fcntl.h"
int file_exists( char *filename)
//int main(int argc, char **argv[])
{
FILE *file;
if(file=fopen(filename,"r"))
//if(file=fopen(argv[1],"r"))
{
fclose(file);
return 1;
}
return 0;
}
int main(int argc, char *argv[] )
{
int fp,number,size,i;
char *buffer;
fp = open(argv[1], "w");
number=atoi(argv[3]);
printf("%d",number);
if(file_exists(argv[1])==1)
{
fseek(fp,0L,SEEK_END);
size=ftell(fp);
fseek(fp,0L,SEEK_SET);
if(size>number)
{
fseek(fp,number,SEEK_SET);
fprintf(fp,argv[2]);
}
if(size<number)
{
int spaces;
fseek(fp,0L,SEEK_END);
spaces=number-size;
buffer= malloc(spaces);
memset(buffer," ",spaces);
//for(i=0;i<spaces;i++)
//{
fprintf(fp,buffer);
//}
free(buffer);
buffer=malloc(number*sizeof(number));
fprintf(fp,argv[2]);
free(buffer);
}
}
if(file_exists(argv[1])==0)
{
creat(argv[1],"w");
buffer=malloc(number);
memset(buffer,' ',number);
//for( i=0;i<number;i++)
//{
fprintf(fp,buffer);
//}
free(buffer);
buffer=malloc(number);
fprintf(fp,argv[2]);
free(buffer);
}
return 0;
}
答案 0 :(得分:0)
fprintf需要文件HANDLE,而不是文件DESCRIPTOR。
如果你真的想使用fprintf,请使用fopen从文件描述符(fp)中获取文件句柄。