| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 373 人关注过本帖
标题:请教一个内存分配上的问题
只看楼主 加入收藏
sd791002
Rank: 2
等 级:论坛游民
帖 子:88
专家分:87
注 册:2010-4-3
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:7 
请教一个内存分配上的问题
程序代码:
#include <iostream>
using namespace std;
int main()
{
    char string[]={"ABCDE"};
    char *p;
    char *q;
    p=string;
    while( *p != '\0' )
            p++;
    p--;
    q=string;
    char *temp=new char;
    for(;q<=p;q++,p--)
    {
        *temp=*p;
        *p=*q;
        *q=*temp;
    }
    cout<<string<<endl;

//    reverse_string(string);
    cout<<string<<endl;
    return 0;
}


以上是我临时写的一个反向排列字符串的小程序  但是  一旦在开头初始化char *string="ABCDE"的时候就会出现问题  调试发现在*p=*q那一步无法写入
请教下原因?
2015-06-20 17:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
vs2010  没啥问题

DO IT YOURSELF !
2015-06-20 18:52
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:5 
程序代码:
#include <iostream>
using namespace std;
int main()
{
    char string[]="ABCDE";//定义字符串
//加双引号就行了
    char *p;
    char *q;
    p=string;
    while( *p != '\0' )
            p++;
    p--;
    q=string;
    char *temp=new char;
    for(;q<=p;q++,p--)
    {
        *temp=*p;
        *p=*q;
        *q=*temp;
    }
delete temp;//申请完内存要释放
    cout<<string<<endl;

//    reverse_string(string);
   // cout<<string<<endl;
    return 0;
}

一片落叶掉进了回忆的流年。
2015-06-20 19:17
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:5 
回复 楼主 sd791002
你确定不是p=string;
这步出问题吗?字符串的赋值好像需要用strcpy函数吧。
2015-06-21 21:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這是學過C之後造成蹩脚C++的問題。1樓的代碼是後來改過的,他原先初始化那句不是那樣寫,改成這樣之後下面又出了問題。歸根結底,就是學過C之後把string視爲cz字符串指針的結果,殊不知string是一個對象引用。

授人以渔,不授人以鱼。
2015-06-22 12:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用了string,就不要再用char*,string也不是char*指針。

用char*字符串(cz)初始化std::string的寫法:
std::string s("ABCDE");

變量名s是std::string對象,用cz字符串"ABCDE"初始化,實際上編譯器在編譯時是把後者的内容複製到對象内部,原始的數據不會再用到了。

授人以渔,不授人以鱼。
2015-06-22 12:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
再補充一下:在C++上用std::string,真的千萬不要當那是C一樣的字符數組或指針用,也不要尋求這個對象的地址試圖自己去訪問數據,因爲它的内存空間是可以隨時變動的,這種情形多發生在修改過數據内容之後,特別是字符串拼接。

授人以渔,不授人以鱼。
2015-06-22 12:45
快速回复:请教一个内存分配上的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099172 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved