我有一个很奇怪的问题。我正在LoadRunner中进行性能测试,并注意到在某些地址中我对字符进行了奇怪的编码。
我写了一个测试应用程序,这是代码:
char bla[256]="test %3A test %2B";
printf(bla);
输出没有意义。看起来像这样:
测试0X0.000000P + 0测试B
这里发生了什么?
最佳答案
我认为,这里的问题是由于数组中存在%
-ed元素(例如%3A
和%2B
)引起的,您将其作为唯一参数传递给printf()
,而没有格式说明符串到位。
当您将字符串直接传递给printf()
(作为printf()
的第一个参数)时,它将把这些字符串解释为格式说明符,并期望使用该参数。但是使用
无效的格式说明符%2B
和
提供较少的参数(在这种情况下,理想情况下应为两个)
都是undefined behaviour。
您可以尝试将打印语句更改为
printf("%s\n", bla);
为了使
printf()
理解那些%
不带有任何特殊含义,只需打印它们即可。