繁体   English   中英

comp.lang.c 常见问题解答中的错误? 计算可变格式字符串的长度

[英]Error in the comp.lang.c FAQ? Calculating the length of a variadically formatted string

问题 15.4: varargs/varargs1.html

在示例代码中出现,他们似乎认为va_arg返回NULL如果列表的末尾已经达到:

len = strlen(first);

va_start(argp, first);

while((p = va_arg(argp, char *)) != NULL)
    len += strlen(p);

va_end(argp);

但是va_arg的文档明确表示情况并非如此,并且va_arg会很高兴地超过列表的末尾。

这与我尝试模仿上述代码并因此导致段错误的经验一致。

事实上, va_arg没有提到在列表的 nd 处返回NULL

如果没有下一个参数,或者类型与实际下一个参数的类型不兼容(根据默认参数提升),则会发生随机错误。

但常见问题解答说:

对 vstrcat 的调用看起来像

char *str = vstrcat("Hello, ", "world!", (char *)NULL);

这意味着他们假设调用者将传递NULL作为最后一个参数来表示列表的结束

他们在调用 vstrcat() 时传递了一个 NULL 指针。

A call to vstrcat looks something like

    char *str = vstrcat("Hello, ", "world!", (char *)NULL);

请注意c-faq 文章vstrcat是如何调用的:

char *str = vstrcat("Hello, ", "world!", (char *)NULL);

最后一个参数是NULL。 这就是 va_arg 返回的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM