虽然尝试将使用vsnprintf格式化的字符串复制到具有strncpy的类成员变量中,但目标字符串未写入,尽管从strncpy返回的结果表明它已写入。 / p>
已与dbx结合使用。
void Elf::errstr(const char *fmt, ...){
va_list arg;
char buf[ERRMAX+1];
va_start(arg, fmt);
vsnprintf(buf, ERRMAX, fmt, arg);
va_end(arg);
char *s = strncpy(errbuf, buf, ERRMAX);
}
此例程是用于访问elf文件的大型“ Elf”类的实现方法的一部分。这个想法是,当在类成员函数的某处发生错误时,会将字符串“ errbuf”设置为错误消息。然后可以使用Elf :: error()(仅返回此字符串)进行访问。如果我在调用后用调试器检查'errbuf',它显示一个空字符串,而's'指向从'buf'复制的字符串。当我将这段代码提取到一个更简单的示例中时,它可以工作,所以我对发生的事情感到非常困惑。