Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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
在Linux上编写C程序创建1MB文件并导致分段错误_C_Linux_Stdio - Fatal编程技术网

在Linux上编写C程序创建1MB文件并导致分段错误

在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);

我正在尝试为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);
    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)的内容。谢谢你的快速回答,它现在起作用了!将在计时器后接受您的答案。:)