分段错误 strcpy/strcat
Segmentation fault strcpy/strcat
我正在编写一个程序来打开一个文件(比如“input_file”),操作它的内容然后将它输出到另一个文件(“manipulated-input_file”)
我已经通过以下方式使用 strcpy 和 strcat 完成了此操作:
char t-filename[]="Manipulated-", filename[50], td-filename[50];
memset ( filename, '[=11=]', FILE_NAME);
printf("Please enter the filename - \n");
scanf( "%30s", filename );
strcpy(td-filename,filename);
strcat(t-filename,td-filename);
printf("%s\n", t-filename);
现在 printf 函数将 t 文件名打印为“Manipulated-input_file”
在这部分之后,我有一个部分可以打开“input_file”并且
做点什么。
fptr = fopen(filename, "r");
while ( fgets (line, sizeof line, fptr) != NULL)
{
...do something...
}
fclose(fptr);
后来我想在代码末尾打开一个名称为't-filename'的文件:
tptr = fopen(t-filename, "w");
fprintf(tptr,"something");
fclose(tpr);
当我编译此代码时出现“分段错误(核心已转储)”。
我不知道哪里出了问题。有人可以帮忙吗?
transfilename
没有足够的 space 来容纳 strcat(transfilename,translatedfilename);
添加的其他项目。它已经充满 "Translated-"
,因为 []
为您提供了初始化字符串中的确切字符数,外加一个空终止符。
您需要将其更改为 char transfilename [LARGE_ENOUGH]
或使用动态内存分配在 运行 时间内更改大小。
strcat(t-filename,td-filename);
t-filename
不够大,无法容纳结果,这是一个未定义的行为。
这里也一样
strcat(transfilename,translatedfilename);
transfilename
不够大,无法容纳结果,这是一个未定义的行为。
我正在编写一个程序来打开一个文件(比如“input_file”),操作它的内容然后将它输出到另一个文件(“manipulated-input_file”)
我已经通过以下方式使用 strcpy 和 strcat 完成了此操作:
char t-filename[]="Manipulated-", filename[50], td-filename[50];
memset ( filename, '[=11=]', FILE_NAME);
printf("Please enter the filename - \n");
scanf( "%30s", filename );
strcpy(td-filename,filename);
strcat(t-filename,td-filename);
printf("%s\n", t-filename);
现在 printf 函数将 t 文件名打印为“Manipulated-input_file”
在这部分之后,我有一个部分可以打开“input_file”并且 做点什么。
fptr = fopen(filename, "r");
while ( fgets (line, sizeof line, fptr) != NULL)
{
...do something...
}
fclose(fptr);
后来我想在代码末尾打开一个名称为't-filename'的文件:
tptr = fopen(t-filename, "w");
fprintf(tptr,"something");
fclose(tpr);
当我编译此代码时出现“分段错误(核心已转储)”。
我不知道哪里出了问题。有人可以帮忙吗?
transfilename
没有足够的 space 来容纳 strcat(transfilename,translatedfilename);
添加的其他项目。它已经充满 "Translated-"
,因为 []
为您提供了初始化字符串中的确切字符数,外加一个空终止符。
您需要将其更改为 char transfilename [LARGE_ENOUGH]
或使用动态内存分配在 运行 时间内更改大小。
strcat(t-filename,td-filename);
t-filename
不够大,无法容纳结果,这是一个未定义的行为。
这里也一样
strcat(transfilename,translatedfilename);
transfilename
不够大,无法容纳结果,这是一个未定义的行为。