我有一个很奇怪的问题。我正在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()理解那些%不带有任何特殊含义,只需打印它们即可。

10-04 11:48
查看更多