莫名其妙的人参果 2016-11-02 11:01 采纳率: 100%
浏览 1078
已采纳

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 这么用...有问题么?

  • 写回答

5条回答 默认 最新

  • SeaTalks 2016-11-02 11:23
    关注
    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那么用没有问题
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?