作者CindyLinz (Cindy Wang)
看板C_and_CPP
標題Re: [討論] strtok分解字串 二維陣列
時間Wed Jun 29 01:32:58 2011
※ 引述《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
推 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)