读书人

sprintf首末两个参数相同时出现的有关

发布时间: 2013-08-16 14:29:57 作者: rapoo

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

在这里要考虑数组的即时变化

读书人网 >C语言

热点推荐