C++ 指针的问题...这个真是莫名其妙了。。。

#include
const char * mid(const char *dst, int n, int m)
{char *esd;
int len = strlen(dst);
if (n > len - 1 || m > len - n || m<1)
{
return dst;
}
else
{
esd = new char[m];
for (int i = 0; i < m; i++){
esd[i] = dst[n + i];
}
return esd;

}

}
int main(){
const char *aaa = "woshizhongguoren";
const char *aac= mid(aaa,1, 4);
std::string kksd = (std::string)aac;
printf("%s,%s", kksd, kksd);
delete[] aac;
std::cin.get();
}
代码如上,目的是截取一段字符出来,为什么最后输出字符串,两个kksd,得到的不一样?第二个正确,第一个乱码...
求大神指导..再就是我这里这个new 和delete 这么用...有问题么?

  1. 字符串最后是以'\0'结尾,所以对你代码做如下更改
esd = new char[m+1]; //多分配一个空间存放'\0'
        for (int i = 0; i < m; i++) {
            esd[i] = dst[n + i];
        }
        esd[m] = 0; //最后一个存放0

  1. printf()后的参数是字符串的首地址,而std::string不是char数组了,所以printf那句改为
 printf("%s,%s", kksd.data(), aac);
  1. delete那么用没有问题

楼主加油努力,,,,,,,,,,,,,

我也不知道,好像我跑的是对的
图片说明

图片说明我也奇怪了哦

图片说明这样跟直观点...