【发布时间】:2019-03-07 09:06:42
【问题描述】:
当我从控制台调用程序时,我正在用 C 语言制作一个小程序来为我制作 .cpp 和 .h 文件。它正在工作,但是当我使用该程序时,在我按下回车键并生成文件后,我收到一个弹出错误:HEAP CORRUPTION DETECTED。
谁能帮我解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
#include <direct.h>
#pragma warning(disable : 4996)
int main(int argc, char*argv[]) {
if (argc < 2 ) {
printf("Not enough arguments given: usage [name]");
return;
}
char* name=(char*)malloc(strlen(argv[1]));
name = argv[1];
char* name2 = (char*)malloc(strlen(name));
strcpy(name2, name);
strcat(name, ".cpp");
strcat(name2, ".h");
name[strlen(name) + 1] = '\0';
name2[strlen(name2)+ 1] = '\0';
FILE * fp = fopen(name, "w");
FILE * fp2 = fopen(name2, "w");
free(name);
free(name2);
return 0;
}
【问题讨论】:
-
name = argv[1];然后你做free(name)。你不能free(argv[1]),你需要释放malloc返回的东西。 -
name = argv[1];?请改用strcpy(name, argv[1]);。此外,在这些分配中,包括strcat的额外空间。 -
别忘了 C 中的
char字符串实际上称为 null-terminated 字节字符串。您还需要为空终止符分配空间(strlen不计算在内)。
标签: c console-application