char purl[1024];
unsigned char * puMember;
unsigned char uMember;
puMember = &uMember;
unsigned char * pMember;
unsigned char Member;
pMember = &Member;
printf("member: %s\n",pMember);
printf("username :%s\n",puMember);
sprintf(purl, "Username: %s %s",puMember,pMember);
printf("URL:%s\n",purl);
printf("member: %s\n",puMember);
printf("username :%s\n",pMember);
输出
member: 12345678
username :User1
URL: username: cUser1 ser1
member: User1
username :ser1
我很困惑为什么 sprintf 在执行后会弄乱我的指针。
pMember 有 12345678 而 puMember 有 User1,我试图将它们格式化为字符串 (purl) 但似乎 sprintf 把它们搞砸了:/
有什么帮助我可以完成这个吗?
最佳答案
您的代码很奇怪 - 如果 pMember
和 puMember
指向单个字符,为什么 printf
将它们作为 mull-terminated 字符串?它会打印任何内容,直到它在内存中找到一个 null。
同样,sprintf
将在 Member
和 uMember
字符之后继续读取内存并填充 purl
- 取决于当它在内存中找到一个空字节时。
使用 snprintf
而不是 printf
将避免缓冲区溢出,但您究竟想要完成什么?
关于c - sprintf 弄乱了我的指针和数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928758/