sprintf首末两个参数相同时出现的问题
有这样几行代码:
#include <string.h>
#include <stdio.h>
int main()
{
char buf[1024];
char a[64] = "/index.html";
sprintf(a,"/home/code%s",a);
memset(&buf,0,sizeof(buf));
sprintf( buf, "aa%s","cc");
sprintf( buf, "%sbbb", buf);
printf("%s\n %s",a,buf);
return 0;
}
输出是:
/home/code/home/code
aaccbbb
为什么第一个输出没有出现预期结果呢? sprintf C
[解决办法]
第一个改成这样
sprintf(a,"%s/home/code",a);
是参数一个一个的压入a的buf里的! 你在前面先把/home/code已经压入 a中了,然后在把a的这个压入后面,所以旧是那个结果了
[解决办法]
memset(&buf,0,sizeof(buf)); buf前面的&是不需要的。
[解决办法]
#include <string.h>
#include <stdio.h>
int main() {
char buf[1024];
char a[64] = "/index.html";
memmove(a+10,a,12);
strncpy(a,"/home/code",10);
sprintf( buf, "aa%s","cc");
sprintf( buf, "%sbbb", buf);
printf("a==[%s]\nbuf==[%s]\n",a,buf);
return 0;
}
//a==[/home/code/index.html]
//buf==[aaccbbb]
//
[解决办法]
比方说你先写入"/index.html",
数组a中的值变为"/home/code"
接着压入a中的值到a中/home/code之后即为/home/code/home/code
在这里要考虑数组的即时变化