看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
angleevil:http://pastie.org/2137484,不要用二維,就一維杯. 06/29 10:19
Favonia:我想有個小陷阱就是只有五個 tokens. 然後可以的話用 06/29 11:08
Favonia:strtok_s 吧。C1x 應該會把這收入標準附件。 06/29 11:09
firejox:不就邊做邊接就好了... strtok會破壞字串... 06/29 17:25
angleevil:strtok愛破壞 06/29 17:29
Favonia:很抱歉我收回目前就用 strtok_s 的建議 Orz 不好意思。 07/01 01:10
Favonia:(發現現在局勢似乎還是一片混亂) 07/06 05:39
※ 編輯: CindyLinz 來自: 210.242.246.249 (09/10 13:18)