简单的new问题!

smartlife 2004-02-02 10:31:42
char *temp = new char[10];
i = strlen(temp);

这两句话在调试的结果是i = 18 为什么呢??

在memory中看到temp后有FD FD FD FD 00 00 00 00 为什么出现这些东东呢!
...全文
44 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzzqqq 2004-02-02
  • 打赏
  • 举报
回复
你用new分配空间后没对它们初始化。
strlen从开始地址往后检查,遇到00就返回前面的字节个数
jmcooler 2004-02-02
  • 打赏
  • 举报
回复
char *temp = new char[10];
temp[9] = '\0';
i = strlen(temp);

这样,i也不一定是10,因为前面的9个字节的内容不确定,所以i小于等于10。

如果是 temp[0] = '\0'; 则i一定等于0
smartlife 2004-02-02
  • 打赏
  • 举报
回复
char *temp = new char[10];
i = strlen(temp);

new 分配的字符串 在内存中没有后面加‘\0’;
这样写才能成为一个准确的字符串:

char *temp = new char[10];
temp[10] = '\0';
i = strlen(temp);

我这样认为对吗??
zhaolaoxin 2004-02-02
  • 打赏
  • 举报
回复
strlen()函数从temp对应的地址开始计数,直到发现一个0为止,这就是用指针的不确定性。
jmcooler 2004-02-02
  • 打赏
  • 举报
回复
再说,strlen()是用来计算字符串长度的,而不是计算内存大小的。
有时候,数组的内存访问越界,但如果只是读内存,而不是写内存,也不会使程序崩溃。
strlen()就是这样。
jmcooler 2004-02-02
  • 打赏
  • 举报
回复
刚new出来的内存中的数据是随机数据。而strlen()是不管你的内存大小,而是计算字符串的长度,直到遇到末尾为0为止
binjuny 2004-02-02
  • 打赏
  • 举报
回复
new分配以00结束,而有时后面的像FD之类的是系统的东西,
smartlife 2004-02-02
  • 打赏
  • 举报
回复
char *temp = new char[10];

memset((void*)temp, 1, 10);

这样 就行了把???

难道生成一个指向10个字符的字符指针,这么麻烦?、

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧