Вы не выделяете достаточно долго в
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");
и где-то бесплатно ч и cpp
В
name[strlen(name) + 1] = '\0';
name2[strlen(name2)+ 1] = '\0';
вы уже предполагаете, что нулевой завершающий символ может использовать strlen . (конечно, эти строки не существуют, используя мое предложение выше)
В
free(name);
вы освобождаете argv[1]
и не можете. (конечно, ваши два начальных бесплатных не существуют, используя мое предложение выше)
В
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;
}