Re: [問題] 想請問一提 關於自己寫字串拷貝函式

看板C_and_CPP作者 (高髮箍)時間12年前 (2011/10/23 00:54), 編輯推噓5(5017)
留言22則, 10人參與, 最新討論串2/2 (看更多)
※ 引述《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
打字很麻煩,只好畫圖了XD
10/23 01:21, 2F

10/23 01:27, , 3F
那我只好推正姐了
10/23 01:27, 3F

10/23 21:13, , 4F
我一開始就是用這樣可是覺得不好看才來問的orz
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
改好快0_0
10/23 22:13, 8F

10/23 22:18, , 9F
while(d[i])就可以了 '\0' = null = False
10/23 22:18, 9F

10/23 22:19, , 10F
寫的不好看.....就要忍耐呀!!! KISS原則是很重要的~~
10/23 22:19, 10F

10/23 22:27, , 11F
'\0' 是byte中所有bits都為零, 可以說它跟 false 相等, 但
10/23 22:27, 11F

10/23 22:27, , 12F
是 NULL 值不一定為零
10/23 22:27, 12F

10/24 01:02, , 13F
NULL 跟 NUL('\0') 不一樣吧
10/24 01:02, 13F

10/24 02:41, , 14F
NULL 一定是零,它叫 "null pointer constant"
10/24 02:41, 14F

10/24 02:42, , 15F
NULL 轉型成指標後稱為 null pointer,不一定為零
10/24 02:42, 15F

10/24 04:28, , 16F
字串結尾是 \0 字元... 跟 NULL 不一樣吧....@@?
10/24 04:28, 16F

10/24 04:28, , 17F
就我所知,NULL 一般用在指標相關的東西,NUL 字元是 \0
10/24 04:28, 17F

10/24 04:29, , 18F
ascii 表第一個char
10/24 04:29, 18F

10/24 16:44, , 19F
感謝little大釐清概念, http://ppt.cc/1Vvf null ptr const
10/24 16:44, 19F

10/24 16:45, , 20F
我觀念不對 感謝littleshan ><
10/24 16:45, 20F

10/24 16:46, , 21F
實際上為評估值為0的常數敘述, 所以<stddef.h>的定義才會為
10/24 16:46, 21F

10/24 16:48, , 22F
implementation-defined null pointer constant
10/24 16:48, 22F
文章代碼(AID): #1EelKeXF (C_and_CPP)
文章代碼(AID): #1EelKeXF (C_and_CPP)