在Linux上编写C程序创建1MB文件并导致分段错误
我正在尝试为Linux编写一个简单的C程序,它将生成一个1MB的文件,但我无法让这段代码正常工作。当我试着运行它时,我收到一个seg fault错误消息,我不确定它到底出了什么问题。但我有预感,这与fseek有关:在Linux上编写C程序创建1MB文件并导致分段错误,c,linux,stdio,C,Linux,Stdio,我正在尝试为Linux编写一个简单的C程序,它将生成一个1MB的文件,但我无法让这段代码正常工作。当我试着运行它时,我收到一个seg fault错误消息,我不确定它到底出了什么问题。但我有预感,这与fseek有关: #include <stdio.h> int main(int argc, char *argv[]) { FILE *fp; fp = fopen(argv[0], "w"); fseek(fp, 1000000 - 1, SEEK_SET);
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[0], "w");
fseek(fp, 1000000 - 1, SEEK_SET);
fputc('\0', fp);
return 0;
}
#包括
int main(int argc,char*argv[])
{
文件*fp;
fp=fopen(argv[0],“w”);
fseek(fp,1000000-1,SEEK_集);
fputc('\0',fp);
返回0;
}
有人能给我指出正确的方向吗?
argv[0]
是二进制文件的名称。您想使用argv[1]
作为文件名。argv[0]
是二进制文件的名称。您希望使用argv[1]
作为文件名。如前所述,您可能需要使用argv[1]
而不是argv[0]
,但是您还需要检查是否提供了参数(if(argc==2)
),并且在写入文件之前需要检查是否成功打开了文件(if(fp!=0)
)。总的来说,您还应该在打开文件后将其关闭。它实际上在没有fclose(fp)的情况下工作在return
语句之前使用code>,但最好是关闭打开的内容。如前所述,您可能需要使用argv[1]
而不是argv[0]
,但还需要检查是否提供了参数(if(argc==2)
),在写入文件之前,您需要检查是否已成功打开该文件(if(fp!=0)
)。总的来说,您还应该在打开文件后将其关闭。它实际上在没有fclose(fp)的情况下工作
在return
语句之前,但最好是关闭打开的内容。哇,谢谢。我想我需要阅读更多关于命令行参数(和文件IO)的内容。谢谢你的快速回答,它现在起作用了!将在计时器后接受您的答案。:)哇,谢谢你。我想我需要阅读更多关于命令行参数(和文件IO)的内容。谢谢你的快速回答,它现在起作用了!将在计时器后接受您的答案。:)