Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

請問一下c語言中有關字串傳遞的問題...

0 views
Skip to first unread message

阿邦

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

請問一下各位先進大德:
為什麼整個程式run完了以後
str2的內容並沒有被清除ㄌㄟ?
小弟並不知道如何用一個函式把global的字串清乾淨
有人可以教我一下嗎? THANKS.....

#include<stdio.h>
char* str2;
char* clear()
{
str2="";
}
void main()
{
char *str1="hello!";
clear();
strcpy(str2,str1);
clear();
}
--
※ Origin: 楓橋驛站(bbs.cs.nthu.edu.tw) ◆ From: h42.s22.ts30.hinet.net

rainbow

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

==> 在 MonBo...@bbs.cs.nthu.edu.tw (阿邦) 的文章中提到:
: 請問一下各位先進大德:
: 為什麼整個程式run完了以後
: str2的內容並沒有被清除ㄌㄟ?

: 小弟並不知道如何用一個函式把global的字串清乾淨
: 有人可以教我一下嗎? THANKS.....
: #include<stdio.h>
: char* str2;
: char* clear()
: {
: str2="";
: }
: void main()
: {
: char *str1="hello!";
: clear();
: strcpy(str2,str1);
: clear();

: }
!@@#%%!! 當然不清除啊!...執行完後,系統回收記憶體而己,不會清除memory
的內容!...沒有辦法在執行完後作動作,且沒有必要.
--
[m● Origin : 雲林科技大學藍天使 <bbs.yuntech.edu.tw> [FROM: 140.125.246.136]

wowo

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

==> 於 rainbow (diy...@bbs.yuntech.edu.tw) 文中述及:
: ==> 在 MonBo...@bbs.cs.nthu.edu.tw (阿邦) 的文章中提到:

: : 請問一下各位先進大德:
: : 為什麼整個程式run完了以後
: : str2的內容並沒有被清除ㄌㄟ?
: : 小弟並不知道如何用一個函式把global的字串清乾淨
: : 有人可以教我一下嗎? THANKS.....
: : #include<stdio.h>
: : char* str2;
: : char* clear()
: : {
: : str2="";
: : }
: : void main()
: : {
: : char *str1="hello!";
: : clear();
: : strcpy(str2,str1);
: : clear();
: : }
: !@@#%%!! 當然不清除啊!...執行完後,系統回收記憶體而己,不會清除memory
^^^^^^^^^str2為global
: 的內容!...沒有辦法在執行完後作動作,且沒有必要.

問題出在於str2並未配置緩衝區,所以ctrcpy後會有"意想不到的結果",str2內容
為"hello"也是"恰好"的結果.
應該先加入 str2=new char(...));再做strcpy動作
( 或者用str2=str1就不必配置記憶體... )
要注意的一點是,str2="";會產生一個空字串並將位址指定給str2,而不是清除
str2的內容,故原來str2的內容"hello"會造成memory leak!!!
--
Ξ Origin: 中正大學寂寞芳心小站 <bbs.ccu.edu.tw> [FROM: 140.123.121.71]

wowo

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

==> 於 wowo (wowo@Feeling) 文中述及:
: ==> 於 rainbow (diy...@bbs.yuntech.edu.tw) 文中述及:

str2[0]='\0';就可將str2內容清除了

笑天下

unread,
Mar 27, 1998, 3:00:00 AM3/27/98
to

==> 於 wowo (wowo...@bbs.ccu.edu.tw) 文中述及:
: ==> 於 wowo (wowo@Feeling) 文中述及:

: : ==> 於 rainbow (diy...@bbs.yuntech.edu.tw) 文中述及:
: : : ==> 在 MonBo...@bbs.cs.nthu.edu.tw (阿邦) 的文章中提到:
: : : : 請問一下各位先進大德:
: : : : 為什麼整個程式run完了以後
: : : : str2的內容並沒有被清除ㄌㄟ?
: : : : 小弟並不知道如何用一個函式把global的字串清乾淨
: : : : 有人可以教我一下嗎? THANKS.....
: : : : #include<stdio.h>
: : : : char* str2; 沒有要求記憶體,只是存記憶體位置的指標而已,
: : : : char* clear() 我覺得用array代替比較好,如果字串不大的話。
: : : : {
: : : : str2=""; str2是一個字元指標,用來存放所指向的字串位址
: : : : } str2=""; 當然無法清除它所指的字串囉!你只叫
: : : : void main() 它指向某個記憶體中的位置而已,為那個位置有什
: : : : { 麼,它就存什麼囉!
: : : : char *str1="hello!";

: : : : clear();
: : : : strcpy(str2,str1);
: : : : clear();
: : : : }
: : : !@@#%%!! 當然不清除啊!...執行完後,系統回收記憶體而己,不會清除memory
: : ^^^^^^^^^str2為global
: : : 的內容!...沒有辦法在執行完後作動作,且沒有必要.
: : 問題出在於str2並未配置緩衝區,所以ctrcpy後會有"意想不到的結果",str2內容
: : 為"hello"也是"恰好"的結果.
: : 應該先加入 str2=new char(...));再做strcpy動作
: : ( 或者用str2=str1就不必配置記憶體... )
: : 要注意的一點是,str2="";會產生一個空字串並將位址指定給str2,而不是清除
: : str2的內容,故原來str2的內容"hello"會造成memory leak!!!
: str2[0]='\0';就可將str2內容清除了
--
[mΞ Origin: 逢甲蒼穹資訊網 <bbs.fcu.edu.tw> [FROM: 140.134.24.83]

0 new messages