执行命令和打印输出的功能

时间:2019-02-05 04:52:48

标签: c

当我打印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 :(得分:1)

您正在未初始化的缓冲区上调用strlen,这是未定义的行为。

strlen通过将指针从字符串的开头增加到空终止符来找到字符串的长度。如果您的缓冲区未初始化,则很可能超出范围以寻找一个。

在您的strlen通话中将sizeof替换为snprintf。另外,将snprintf()替换为vsnprintf()