функции для выполнения команды и вывода на печать - PullRequest
0 голосов
/ 05 февраля 2019

Когда я печатаю buf, появляются странные символы

void excmd(const char* cmd, ...) {
    char buf[100];
    va_list args;
    va_start(args,cmd); 
    snprintf(buf,strlen(buf),cmd,args);
    printf("%s",buf); // just here to debug // I also want to use my own print instead of it but it won't works
    system(buf);
    va_end(args);
    /* calling it like excmd("echo %s",files) */
}

Также это не работает

#define mprintf(fmt,...) fprintf(stderr,"\033[2K " fmt " \033[0m\n", ##__VA_ARGS__)

1 Ответ

0 голосов
/ 05 февраля 2019

Вы вызываете strlen в неинициализированном буфере, поведение которого не определено.

strlen находит длину строки, увеличивая указатель от начала строки до нулевого терминатора.Если ваш буфер неинициализирован, он может выйти за пределы в поисках одного.

Замените strlen на sizeof в вашем вызове snprintf.Также замените snprintf() на vsnprintf().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...