分段错误(文件位于C上)
我想创建一个名为module_extension/user.txt的文件:分段错误(文件位于C上),c,C,我想创建一个名为module_extension/user.txt的文件: #include <stdio.h> #include <string.h> int main(int argc, const char * argv[]) { char example[100]; char user[100]="user"; char str[]="module_extension/"; FILE* fichier=NULL;
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
char example[100];
char user[100]="user";
char str[]="module_extension/";
FILE* fichier=NULL;
strcpy(example,str);
strcat(example,user);
strcat(example,".txt");
fichier=fopen(example,"a+");
fprintf(fichier,"**************New Line************ \n");
fclose(fichier);
return 0;
}
人们试图在评论中指出的是。当进行系统调用时,应该检查返回值,以确保它是否成功执行。在您的情况下,
open
系统调用可能会失败,原因有很多。在这种情况下,变量fichier
中的文件描述符无效。使用它会导致出现seg故障
,您将得到该故障
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
char example[100];
char user[100]="user";
char str[]="module_extension/";
FILE* fichier=NULL;
strcpy(example,str);
strcat(example,user);
strcat(example,".txt");
fichier=fopen(example,"a+");
if( fichier != NULL)
{
fprintf(fichier,"**************New Line************ \n");
fclose(fichier);
}
else
printf("File open failed");
return 0;
}
#包括
#包括
int main(int argc,const char*argv[]
{
字符示例[100];
字符用户[100]=“用户”;
char str[]=“模块_扩展/”;
FILE*fichier=NULL;
strcpy(例如str);
strcat(例如,用户);
strcat(例如“.txt”);
fichier=fopen(例如,“a+”);
if(fichier!=NULL)
{
fprintf(fichier,“****************新线***************\n”);
fclose(fichier);
}
其他的
printf(“文件打开失败”);
返回0;
}
这样,即使在系统调用失败时,您也可以使程序防故障。您是否检查了
fopen
的结果?当然你没有…我没有这个文件,它不是被创建的。“result”=返回值。因此,除了fopen
(你应该检查一下)、fprintf
和fclose
之外,扔掉所有东西。您必须先隔离问题,然后才能修复它。那么您希望fopen
如何在不存在的目录中创建文件呢?
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{
char example[100];
char user[100]="user";
char str[]="module_extension/";
FILE* fichier=NULL;
strcpy(example,str);
strcat(example,user);
strcat(example,".txt");
fichier=fopen(example,"a+");
if( fichier != NULL)
{
fprintf(fichier,"**************New Line************ \n");
fclose(fichier);
}
else
printf("File open failed");
return 0;
}