当我打印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__)
答案 0 :(得分:1)
您正在未初始化的缓冲区上调用strlen
,这是未定义的行为。
strlen
通过将指针从字符串的开头增加到空终止符来找到字符串的长度。如果您的缓冲区未初始化,则很可能超出范围以寻找一个。
在您的strlen
通话中将sizeof
替换为snprintf
。另外,将snprintf()
替换为vsnprintf()
。