Re: [討論] strtok分解字串 二維陣列

看板C_and_CPP作者 (Cindy Wang)時間14年前 (2011/06/29 01:33), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《HILL33LOVE (就是愛希爾)》之銘言: : 最近在看分解字串的功能時, : 看到用來存每段字串都是用二維陣列去存的 : 想問一下,以下例子有可以改寫的地方嗎? : 一定要用二維的方式去儲存嗎? : 謝謝 : int i = 0; : char *tokenPtr; : char *delim = "@"; : char p[6][30]; : char filename[50] = "@PID@VID@VER@OS@Audio"; : tokenPtr = strtok(filename, delim); : while(tokenPtr != NULL) : { : strcpy(p[i], tokenPtr); : printf("p[%d] = %s\n", i, p[i]); : i++; : tokenPtr = strtok(NULL, delim); : } 你在意的應該是希望不要用到 6x30 這麼大的空間? 那你可以把它們「接」在同一個陣列裡面. 然後再用另一個陣列存指標指向這一個陣列: char p[50]; char *pp[6]; ... pp[0] = p; pp[1] = p+5; pp[2] = p+7; 類似這樣.. (假設你空的間隔是夠大的) 那就可以這樣用: printf("p[%d] = %s\n", i, pp[i]); (這次應該沒有再 undefined 或 unspecified 了吧 ^^|) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.242.246.249

06/29 10:19, , 1F
http://pastie.org/2137484,不要用二維,就一維杯.
06/29 10:19, 1F

06/29 11:08, , 2F
我想有個小陷阱就是只有五個 tokens. 然後可以的話用
06/29 11:08, 2F

06/29 11:09, , 3F
strtok_s 吧。C1x 應該會把這收入標準附件。
06/29 11:09, 3F

06/29 17:25, , 4F
不就邊做邊接就好了... strtok會破壞字串...
06/29 17:25, 4F

06/29 17:29, , 5F
strtok愛破壞
06/29 17:29, 5F

07/01 01:10, , 6F
很抱歉我收回目前就用 strtok_s 的建議 Orz 不好意思。
07/01 01:10, 6F

07/06 05:39, , 7F
(發現現在局勢似乎還是一片混亂)
07/06 05:39, 7F
※ 編輯: CindyLinz 來自: 210.242.246.249 (09/10 13:18)
文章代碼(AID): #1E2X1CWp (C_and_CPP)
文章代碼(AID): #1E2X1CWp (C_and_CPP)