我正在编写一个程序来打开文件(例如“ 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);
当我编译这段代码时,我收到“分段错误(内核已转储)”。
我不知道出了什么问题。有人可以帮忙吗?
答案 0 :(得分:4)
transfilename
没有足够的空间来容纳strcat(transfilename,translatedfilename);
添加的其他项目。 "Translated-"
已经满了,因为[]
为您提供了初始化字符串中的确切字符数以及一个空终止符。
您需要将其更改为char transfilename [LARGE_ENOUGH]
或使用动态内存分配来在运行时更改大小。
答案 1 :(得分:2)
strcat(t-filename,td-filename);
t-filename
的大小不足以容纳结果,它是未定义的行为。
此处相同
strcat(transfilename,translatedfilename);
transfilename
的大小不足以容纳结果,它是未定义的行为。