c - sprintf 弄乱了我的指针和数据?

标签 c

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 把它们搞砸了:/

有什么帮助我可以完成这个吗?

最佳答案

您的代码很奇怪 - 如果 pMemberpuMember 指向单个字符,为什么 printf 将它们作为 mull-terminated 字符串?它会打印任何内容,直到它在内存中找到一个 null。

同样,sprintf 将在 MemberuMember 字符之后继续读取内存并填充 purl - 取决于当它在内存中找到一个空字节时。

使用 snprintf 而不是 printf 将避免缓冲区溢出,但您究竟想要完成什么?

关于c - sprintf 弄乱了我的指针和数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5928758/

相关文章:

c++ - C/C++ 优化

c - 为什么这个打印链表功能不起作用?

c - 为什么代码的输出是这样的?

c - BlueZ 蓝牙 API 和距离校准精度

c - 为什么 "a"的输出是 -80?

c - fread 读取超过文件末尾

c - 当我尝试运行 mpi 示例时权限被拒绝

c++ - 为游戏优化 LAN 服务器

c - 帕斯卡和 C : different output

c - 尝试访问 C 中链表结构的元素并调用结构元素上的函数