У меня есть следующая «основная» функция с соответствующим выходом консоли.
argv[1] = "C:\\Program Files (x86)\\InstallShield Installation Information\\0x041f.txt"
int main(int argc, char **argv){
if (argc < 2)
{
printf("Please provide a file name with extension\r\n");
return 1;
}
unsigned char buf[LEN_NORM];
char filename[230];
char ali_dirname[200];
char bli_dirname[200];
FILE *fp_obj, *fp_det, *fp_txt = fopen(argv[1], "rb");
//dirty?
*(argv[1] + strlen(argv[1]) + 1 - 5) = '\0';
snprintf(ali_dirname, strlen(argv[1]) + 4, "%s/ali", argv[1]);
snprintf(bli_dirname, strlen(argv[1]) + 4, "%s/bli", argv[1]);
char cmd[200];
snprintf(cmd, strlen(argv[1]) + 12, "@RD /S /Q \"%s\"", argv[1]);
printf("cmd: %s\r\n", cmd);
system(cmd);
printf("cmd: %s\r\n", cmd);
}
cmd: @RD / S / Q "C: \ Program Files (x86) \ InstallShield Информация об установке\ 0x041f "
Неверный синтаксис имени файла, имени каталога или метки тома.
информация о файле \ 0x041f" iles (x86) \ InstallShield Installa
Как вы можете видеть после системного вызова, консоль полностью сломана. Я действительно не могу понять, почему это происходит. Любая идея?
РЕДАКТИРОВАТЬ: Спасибочто касается обратной связи, я подумал, что длина snprintf примерно равна длине данных, которые нужно записать. "cmd" имеет фиксированную длину, которая является максимально допустимым размером. Согласно информации, которую я нашел в сети, "размер" - это максимальное количество байтов(символы), которые будут записаны в буфер, поэтому в моем случае 12 должно быть правильным числом (я проверил с помощью отладчика и правильно написано \ "), а не sizeof (cmd), я не прав? Я пробовал с "12 + 1" (4 + 1) и с "sizeof" во всех случаях "snprintf", но ничего не меняется
Код работает в "основном" (я обновил его)
Если я уберу "System (cmd)", вызов консоли будет в порядке!