fopen 弄乱文件名并更改文件名

fopen messing up file name and changing the file name

提问人:Eitan Ratner 提问时间:8/24/2023 最后编辑:Eitan Ratner 更新时间:9/5/2023 访问量:73

问:

这是我的代码(带有调试打印):

char *full_file_name = malloc(sizeof(char));
FILE *ob_file;

/*creating full file name*/
strcpy(full_file_name, file_name);
strcat(full_file_name, ".ob");
printf("\n full_file_name :%s", full_file_name);

/* -- Creating the new file and inputting data --*/
ob_file = fopen(full_file_name, "w");
printf("\n full_file_name :%s", full_file_name);

这是打印结果:enter image description here

为什么会这样?该怎么办?

C Fopen(英语:C Fopen

评论

0赞 Jabberwocky 8/24/2023
您需要展示一个最小的可重现示例。你展示的代码没有错,问题出在你没有展示的一些代码上。它是什么以及如何初始化?还要在 之后放一个 ,比如full_file_name\n%s....file_name :%s\n"
0赞 Eitan Ratner 8/24/2023
我添加了更多代码
12赞 frippe 8/24/2023
您只为单个字符分配内存。 (顺便说一句,您也应该在 malloc 之后检查 NULL)
6赞 Jabberwocky 8/24/2023
“我确信 strcat 会像 strcpy 一样重新分配更多的内存”:呃。strcpy 不分配任何内存...你确定你真的解决了吗?
2赞 Support Ukraine 8/24/2023
malloc(sizeof(char)); --> malloc(strlen(file_name) + 1 + NUMBER_OF_CHARACTERS_TO_APPEND);在这种情况下,似乎是 3NUMBER_OF_CHARACTERS_TO_APPEND

答:

1赞 NicknEma #1

您只为单个字符分配内存。 (顺便说一句,您也应该在 malloc 之后检查)NULL