Re: [問題] 想請問一提 關於自己寫字串拷貝函式
※ 引述《kevinqaz (阿楷)》之銘言:
: C++開發平台(Platform)
: 程式碼(Code)
: 下面的strcopy()是一個字串拷貝函式, 功能是將s所指向的字串複製到d所指向的buffer
: 中.
: void strcopy(char* d, char* s)
: {
: }
: int main(void)
: {
: char a[] = "Hello world";
: char b[50];
: strcopy(b, a);
: printf("%s\n", b);
: return 0;
: }
: 請問要如何完成他呢
: 試了好久還是弄不出來ORZ
考慮字串在記憶體中的位置(字太多懶得打):
┌─┬─┬─┬─┬─┬─┬─┐
"hello!" → │h│e│l│l│o│!│\0│
└─┴─┴─┴─┴─┴─┴─┘
注意除了雙引號括起來的字, 最後還有一個'\0', 所以需要複製字
數看也知道是 7
void strcopy(char* d, char* s)
{
d[0] = s[0]; // copy 'h'
d[1] = s[1]; // copy 'e'
d[2] = s[2]; // copy 'l'
d[3] = s[3]; // copy 'l'
d[4] = s[4]; // copy 'o'
d[5] = s[5]; // copy '!'
d[6] = s[6]; // copy '\0'
}
以題目要求來看這樣就可以交差了, 如果要複製的字多一點, 你就
再加個幾行進去, 非常簡單!
然後你就會發現這樣很白痴, 助教把 a存的字串加長一點你程式就
當掉了, 重複執行同樣的敘述還是要用最合適的迴圈:
d[ 0 ] = s[ 0 ]; // copy first char
// ...
即使是空字串, 這樣的敘述也是安全的, 再來就是一股腦的複製直
到複製了'\0'結束字元, 表示函式的工作完成可以讓它結束:
int i = 0;
d[ i ] = s[ i ]; // copy first char, d[ 0 ] = s[ 0 ]
while( d[ i ] != '\0' ) { // loops until copy a '\0' char
i++; // move forward, copy the next char
d[ i ] = s[ i ];
}
完成.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.213
推
10/23 01:15, , 1F
10/23 01:15, 1F
推
10/23 01:21, , 2F
10/23 01:21, 2F
推
10/23 01:27, , 3F
10/23 01:27, 3F
推
10/23 21:13, , 4F
10/23 21:13, 4F
→
10/23 21:14, , 5F
10/23 21:14, 5F
→
10/23 21:17, , 6F
10/23 21:17, 6F
→
10/23 21:58, , 7F
10/23 21:58, 7F
※ 編輯: poyenc 來自: 140.121.197.115 (10/23 22:13)
→
10/23 22:13, , 8F
10/23 22:13, 8F
→
10/23 22:18, , 9F
10/23 22:18, 9F
→
10/23 22:19, , 10F
10/23 22:19, 10F
→
10/23 22:27, , 11F
10/23 22:27, 11F
→
10/23 22:27, , 12F
10/23 22:27, 12F
→
10/24 01:02, , 13F
10/24 01:02, 13F
推
10/24 02:41, , 14F
10/24 02:41, 14F
→
10/24 02:42, , 15F
10/24 02:42, 15F
→
10/24 04:28, , 16F
10/24 04:28, 16F
→
10/24 04:28, , 17F
10/24 04:28, 17F
→
10/24 04:29, , 18F
10/24 04:29, 18F
→
10/24 16:44, , 19F
10/24 16:44, 19F
→
10/24 16:45, , 20F
10/24 16:45, 20F
→
10/24 16:46, , 21F
10/24 16:46, 21F
→
10/24 16:48, , 22F
10/24 16:48, 22F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):