作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下示例代码。
#include <stdio.h>
#include <unistd.h>
#include <stdarg.h>
int test(const char *fmt,...)
{
va_list args;
char *vacmd=NULL;
va_start(args,fmt);
vasprintf(&vacmd, fmt, args);
printf("vacmd is %s\n", vacmd);
return 0;
}
int main(void)
{
int ret = 0;
char *cmd="@wilso%nqw";
ret = test(cmd);
}
输出是:
vacmd is @wilsoqw
它删除了 %n
从字符串中。所以我的问题是 vasprintf()
是否适用于特殊字符?或者我错过了什么?
最佳答案
对于 printf()
和系列函数,
Each conversion specification is introduced by the character
%
.
因此,格式字符串中的 %
在与 printf()
/scanf()
系列一起使用时具有特殊含义。您可以使用%%
来放弃特殊含义。
引用这方面的标准,来自fprintf()
函数规范
<小时/>
%
A
%
character is written. No argument is converted. The complete conversion specification shall be%%
.
FWIW,您当前的代码显示 undefined behaviour ,如“如果格式参数不足,则行为未定义。” 根据您的代码,没有为 %n
格式说明符提供参数。
关于c - 如何将 vasprintf() 与特殊字符 (%) 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30917402/
我是一名优秀的程序员,十分优秀!