コンソールからプログラムを呼び出すときに、Cで小さなプログラムを作成して.cppファイルと.hファイルを作成します。動作していますが、プログラムを使用すると、Enterキーを押してファイルを作成した後、ポップアップエラーが表示されます:HEAP CORRUPTIONDETECTED。
誰かがこれで私を助けることができますか?
#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;
}
あなたは十分な長さを割り当てていません
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");
ヌル終了文字を忘れずに「.cpp」と「.h」用のスペースが必要なため、解決策は次のようになります。
size_t alen = strlen(argv[1]);
char * h = malloc(alen + 3);
char * cpp = malloc(alen + 5);
strcpy(h, argv[1]);
strcpy(h + alen, ".h");
strcpy(cpp, argv[1]);
strcpy(cpp + alen, ".cpp");
そしてどこかで無料のhとcpp
に
name[strlen(name) + 1] = '\0'; name2[strlen(name2)+ 1] = '\0';
strlenを使用できるように、nullの終了文字があると既に想定しています。(もちろん、これらの行は上記の私の提案を使用して存在しません)
に
free(name);
あなたは自由でargv[1]
あり、あなたはできません。(もちろん、上記の私の提案を使用すると、2つの最初の無料は存在しません)
に
if (argc < 2 ) { printf("Not enough arguments given: usage [name]"); return; }
何も返さず、intが期待されます
また、fopenの成功を確認する必要があります。また、mallocでも、通常、メモリをほとんど必要としないプログラムに十分なメモリがあります。
あなたのメインは:
int main(int argc, char*argv[]) {
if (argc < 2 ) {
printf("Not enough arguments given: usage %s [name]\n", *argv);
return -1;
}
size_t alen = strlen(argv[1]);
char * h = malloc(alen + 3);
char * cpp = malloc(alen + 5);
if ((h == NULL) || (cpp == NULL)) {
puts("not enough memory");
return -1;
}
strcpy(h, argv[1]);
strcpy(h + alen, ".h");
strcpy(cpp, argv[1]);
strcpy(cpp + alen, ".cpp");
FILE * fph = fopen(h, "w");
if (fph == NULL) {
printf("cannot open %s\n", h);
return -1;
}
FILE * fpcpp = fopen(cpp, "w");
if (fcpp == NULL) {
printf("cannot open %s\n", cpp);
return -1;
}
free(h);
free(cpp);
/* write in files */
fclose(fh);
fclose(fcpp);
return 0;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加