分段故障strcpy / strcat

时间:2020-06-16 10:13:15

标签: c strcpy strcat

我正在编写一个程序来打开文件(例如“ input_file”),操纵其内容,然后将其输出到另一个文件(“ manipulated-input_file”)

我通过以下方式用strcpy和strcat完成了此操作:

char t-filename[]="Manipulated-", filename[50], td-filename[50];
memset ( filename, '\0', 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); 

当我编译这段代码时,我收到“分段错误(内核已转储)”。

我不知道出了什么问题。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

transfilename没有足够的空间来容纳strcat(transfilename,translatedfilename);添加的其他项目。 "Translated-"已经满了,因为[]为您提供了初始化字符串中的确切字符数以及一个空终止符。

您需要将其更改为char transfilename [LARGE_ENOUGH]或使用动态内存分配来在运行时更改大小。

答案 1 :(得分:2)

strcat(t-filename,td-filename);

t-filename的大小不足以容纳结果,它是未定义的行为。

此处相同

strcat(transfilename,translatedfilename);

transfilename的大小不足以容纳结果,它是未定义的行为。

相关问题