Discussion:
問兩個 char[] 合併 ?
(时间太久无法回复)
放牧中 ~~
2006-02-23 04:01:53 UTC
Permalink
請問各位大大 :
如果有一個 char[] a ="123" , char[] b="456";
要如何把 b 合併到 a 呢 ? 如果我用 strcat(a,b);
執行之後他都會說記憶體區段錯誤 , 請問大大要怎麼寫才對呢 ?
PS : 我是用 c 語言寫,用 GCC 編譯,在 linux 上跑


--
Ξ Origin: 中興大學天樞資訊網 <bbs.nchu.edu.tw>
Ξ From : router.leadtek.com.tw
米菇小呆
2006-03-01 06:16:41 UTC
Permalink
Post by 放牧中 ~~
如果有一個 char[] a ="123" , char[] b="456";
要如何把 b 合併到 a 呢 ? 如果我用 strcat(a,b);
執行之後他都會說記憶體區段錯誤 , 請問大大要怎麼寫才對呢 ?
PS : 我是用 c 語言寫,用 GCC 編譯,在 linux 上跑
正常的,因為你 a 的記憶體令的不夠大..
所以當然把b加上去的時候,a就爆了..
宣告方式改一下吧...

char a[] ="123" ;
char b[] ="456";
strcat(a,b);
cout << a;

結果是:
123456

用 Dev=C++ 測的
--
人一旦失去信心,就活不下去。因為人憑著信心作為生存的動力。

--
>> 台灣科大資工系 清流站 # ntust.org #
>> Author from: vr7.csie.ntust.edu.tw 
roylee
2006-03-01 07:08:13 UTC
Permalink
Post by 米菇小呆
正常的,因為你 a 的記憶體令的不夠大..
所以當然把b加上去的時候,a就爆了..
宣告方式改一下吧...
char a[] ="123" ;
char b[] ="456";
strcat(a,b);
cout << a;
123456
用 Dev=C++ 測的
這個只有印出的"字串對",但是觀念有問題...

char c[] ="abc"; // 加上這行
char a[] ="123";
char b[] ="456";
cout << c; // abc
strcat(a,b);
cout << c; // 56


三個變數在記憶體中表示如下:

b [0] [1] [2] [3] a [0] [1] [2] [3] c [0] [1] [2] [3]
'4' '5' '6' '\0' '1' '2' '3' '\0' 'a' 'b' 'c' '\0'

這裡的 strcat 會破壞到 c 的資料,變成

b [0] [1] [2] [3] a [0] [1] [2] [3] c [0] [1] [2] [3]
'4' '5' '6' '\0' '1' '2' '3' '4' '5' '6' '\0' '\0'

a 的宣告大小就只有原本的 3+1 bytes
要是要讓它裝得更多,勢必就會覆蓋到其他的資料

原 po 應該要宣告一個"夠大"的 buffer 來裝合併後的字串
夠大的意思表示,要能確定,得到的字串不會超過這個 buffer 的大小


--
▄▄▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄▄ <telnet://bbs.cs.nctu.edu.tw>
 █▄▄▄▄█ █ ▄▄▄▄▄█ Player: roylee 
▄█▄▄▄▄█ ▄▄▄█ █▄▄▄▄▄ From: 59-104-235-27.adsl.dynamic.
☆ 次世代BS2 ☆ 可申請個人板 150MB 超大相簿 http://pic.bs2.to 資訊人 250MB
放牧中 ~~
2006-03-02 03:18:39 UTC
Permalink
依據大大的意思,是不是我要先算 a 和 b 的長度,
然後宣告一個 c 陣列,在把 a 的值和 b 的值依序放入呢 ?
若要把 a ,b 陣列的值放入 c 陣列,除了用個for迴圈,先放 a , 再放 b 以外,
還有沒有什麼比較好的方法把 a 和 b 放入 c 呢 ? 請大大在指點吧,謝謝 !!
Post by roylee
這個只有印出的"字串對",但是觀念有問題...
char c[] ="abc"; // 加上這行
char a[] ="123";
char b[] ="456";
cout << c; // abc
strcat(a,b);
cout << c; // 56
三個變數在記憶體中表示如下:
b [0] [1] [2] [3] a [0] [1] [2] [3] c [0] [1] [2] [3]
'4' '5' '6' '\0' '1' '2' '3' '\0' 'a' 'b' 'c' '\0'
這裡的 strcat 會破壞到 c 的資料,變成
b [0] [1] [2] [3] a [0] [1] [2] [3] c [0] [1] [2] [3]
'4' '5' '6' '\0' '1' '2' '3' '4' '5' '6' '\0' '\0'
a 的宣告大小就只有原本的 3+1 bytes
要是要讓它裝得更多,勢必就會覆蓋到其他的資料
原 po 應該要宣告一個"夠大"的 buffer 來裝合併後的字串
夠大的意思表示,要能確定,得到的字串不會超過這個 buffer 的大小
--
Ξ Origin: 中興大學天樞資訊網 <bbs.nchu.edu.tw>
Ξ From : router.leadtek.com.tw

继续阅读narkive:
Loading...