读书人

c++ string

发布时间: 2012-10-07 17:28:51 作者: rapoo

c++ string求助
我想自己保存一个与源字符串无关的字符串,应该怎么实现?

C/C++ code
#include <string>#include <iostream>void main(){    char* charTmp = new char[100];    charTmp = "hello world";    printf("%d\n",charTmp);    printf("%s\n",charTmp);    char* str1 = new char[100];    strcpy(str1,charTmp);    delete []charTmp;    printf("%d\n",str1);    printf("%s\n",str1);    delete []str1;    system("pause");}

我感觉上面写的应该没问题,可是运行会出错。
求高手解答。

[解决办法]
关键在于charTmp = "hello world"这样的赋值不妥当,会导致delete失败,应该改为strcpy(charTmp, "hello world"),这样就不会出现charTmp被常量的歧义了。
[解决办法]
C/C++ code
#include <stdio.h>#include <string.h>int main(int argc, char* argv[]){    char* charTmp = new char[100];    //charTmp = "hello world";    strcpy(charTmp, "hello world");    printf("%d\n",charTmp);    printf("%s\n",charTmp);    char* str1 = new char[100];    strcpy(str1,charTmp);    delete charTmp;    printf("%d\n",str1);    printf("%s\n",str1);    delete str1;    system("pause");    return 0;}
[解决办法]
探讨

引用:
所以正确的习惯是delete之后再把指针charTmp=NULL;这样杜绝这种容易导致访问错误的方式。

我的目的是想自己保存一份字符串的备份,就算new出来的被delete之后,也不影响我这正常访问。

[解决办法]
探讨

引用:
我运行的没问题啊。。。你错误在什么地方啊。。。你 printf("%d\n",charTmp)这是什么意思啊。。。好像毫无用处

是打印字符首地址。。我想打印的是,至于具体打印出来的是啥,我也不太清楚。。。

[解决办法]
charTmp = "hello world";这句有问题啊,字符串不能这么赋值,要用memcpy或是strncpy之类的,你这样相当与直接修改指针变量的值,让它指向一个字符串常量了,所以在delete的时候就挂了,而且new的100个字符也没法释放了
[解决办法]
你程序中最直接的错误就是delete charTmp;
因为你在给 charTmp赋值时是直接用“=”运算符,只是将 charTmp这个指针的指向改变了,使它指向了一个常量字符串的首地址,而常量字符串在只读区,所以你在delete 这个指针指向的区域时会出错。可以用strcopy或memcopy来赋值。



读书人网 >C++

热点推荐