關於指標函數,可除錯但無法執行? |
答題得分者是:Stallion
|
evil666
一般會員 發表:3 回覆:4 積分:1 註冊:2004-09-22 發送簡訊給我 |
大家好~ 小弟想請教一下? 關於下面這段小弟的練習。
#include上面的程式,是想將str1中的空白使用DeleteEmpty()給去除掉, 並輸出為str2。 但是? 1.)小弟將以上的程式,使用除錯 > 逐步執行,能夠完整跑完。 而且看起來程式並沒錯誤… 2.)compiler也沒錯誤 但實際執行的時候,卻會出現錯誤? 能請各位板大幫小弟除錯一下嗎? 感恩! m(_._)m 發表人 - evil666 於 2005/11/17 09:50:19 |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
evil666 您好: 問題應該是出在:
char *tmp;
BCB6中嘗試著將其改為:
char *tmp = Str; // 指向原字串的開頭
就能執行了! 原因是:宣告char *tmp;但沒有指向或給予足夠字元儲存空間,所以可能發生誤填記憶體的錯誤!
我的改法是指向同一字串即Str,如果要產生另一個新的結果字串,
則要先複製輸入的字串或動態配置足夠長的記憶體空間。 RichTop 敬上 =====*****
把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題!
=====#####
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
插個花!
< class="code">
char *DeleteEmpty(char *Str)
{
char *tmp; //tmp是(local)區域變數,脫離了函數,就從堆疊消失了,所以不行作為回傳的位址,況且指標沒有初始化,指向哪裡呢?
tmp = new char[strlen(Str)]; //初始化空間
int i=0,x=0;
while(Str[i] != '\0')
{
if(Str[i] != ' ')
{
tmp[x] = Str[i];
x ;
}
i ;
}
tmp[x] = '\0'; //這樣tmp保證不會比Str長吧!
strncpy(Str,tmp,strlen(tmp)); //以原位址回傳
delete tmp;
return Str;
}
-----------------------
Practice makes perfect.
|
evil666
一般會員 發表:3 回覆:4 積分:1 註冊:2004-09-22 發送簡訊給我 |
引言: 插個花! < class="code"> char *DeleteEmpty(char *Str) { char *tmp; //tmp是(local)區域變數,脫離了函數,就從堆疊消失了,所以不行作為回傳的位址,況且指標沒有初始化,指向哪裡呢? tmp = new char[strlen(Str)]; //初始化空間 int i=0,x=0; while(Str[i] != '\0') { if(Str[i] != ' ') { tmp[x] = Str[i]; x ; } i ; } tmp[x] = '\0'; //這樣tmp保證不會比Str長吧! strncpy(Str,tmp,strlen(tmp)); //以原位址回傳 //這個地方會出錯? delete tmp; return Str; } 抱歉,小弟貼上程式碼後…會無法執行… 無法使用strncpy()為什麼呢?... ----------------------- Practice makes perfect. |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
evil666
一般會員 發表:3 回覆:4 積分:1 註冊:2004-09-22 發送簡訊給我 |
引言:#include你有嗎? ----------------------- >>< face="Verdana, Arial, Helvetica"> 有滴…code如下: |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |