我正试图以这种方式使用sprintf:
DebugLogMsg10 (DebugStruct, sizeThreadID, "szLoginHeadString before:\r\n%s",szLoginHeadString );
sprintf (szLoginHeadString, "<br/>%s", szLoginHeadString);
DebugLogMsg10 (DebugStruct, sizeThreadID, "szLoginHeadString after:\r\n%s",szLoginHeadString );
我不理解结果字符串。
[Thu Feb 20 14:49:01 2014] [线程:0] szLoginHeadString之前:
<form name="login_from" action="http://PLACEHOLDER.com" method="post" accept-charset="ISO-8859-15">
[Thu Feb 20 14:49:01 2014] [线程:0] szLoginHeadString之后:
<br/><br/> name="login_from" action="http://http://PLACEHOLDER.com" method="post" accept-charset="ISO-8859-15">
我会期待像
这样的东西<br/><form name="login_from".....
我没想到什么?
答案 0 :(得分:4)
您的代码调用未定义的行为。 sprintf
族函数不能被赋予在内存中重叠的参数,如联机帮助页中所述:
C99和POSIX.1-2001指定结果未定义(例如,如果目标字符串数组和提供的输入参数之一引用相同的缓冲区。)
答案 1 :(得分:1)
它可能与您的C库相关,但是通常sprintf在您的内存中运行,而不是在编辑之前复制字符串,因此在开始时它会覆盖您的字符串的开头“WB”,然后添加您的字符串(已经淹没了自己。所以你有两个和没有。
请勿同时使用一个字符串作为来源和输出。