[問題] 關於存取指標所指的內容
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC, Linux
問題(Question):
從buf複製了一段文字到tmp裡面,這串文字的內容大概像是下面Input的那一串,
然後會print出一個類似表格這樣,
但我想做的是把這串字切割開,然後重新篇排某些欄位,
像Output寫的那樣,像是把C的欄位都調整到B前面,
可是這串字的是個字元指標所指的,char *buf這樣,
所以在撰寫上碰到些問題,不知道怎麼複製出指標所指的記憶體位置存放的值,
想把字串切割開之後存放到另一個陣列上再重新編排塞回去
餵入的資料(Input):
AAA\tBBB\tCCC\tDDD\nAA1\tBB1\tCC1\tDD1\nAA2\tBB2\tCC2\tDD2
AAA BBB CCC DDD
AA1 BB1 CC1 DD1
AA2 BB2 CC2 DD2
預期的正確結果(Expected Output):
AAA\tCCC\tBBB\tDDD\nAA1\tCC1\tBB1\tDD1\nAA2\tCC2\tBB2\tDD2
AAA CCC BBB DDD
AA1 CC1 BB1 DD1
AA2 CC2 BB2 DD2
錯誤結果(Wrong Output):
似乎只有把pointer所存放的記憶體位置複製到要重新排版用的arr[]中,
程式碼(Code):(請善用置底文網頁, 記得排版)
1 CHAR *tmp, *token_1, *token_2;
2 tmp = Malloc(MAX_BUF_LEN);
3 memcpy(tmp, buf, buf_size);
4 CHAR arr[35];
5
6 while ( (token_1 = strsep(&tmp, "\n")) != NULL ) {
7 i = 0;
8 while ( ((token_2 = strsep(&token_1, "\t")) != NULL) ) {
9
10 strcpy(&arr[i], token_2);
11 debug_printf("%s\t%d", &arr[i], i);
12 i++;
13 }
14 }
補充說明(Supplement):
可能是我觀念錯誤,我覺得應該要寫這樣 strcpy(arr[i], *token_2);
可是make下去卻會有問題,pointer from integer without a cast
改成 strcpy(&arr[i], token_2); 就過了,之後雖然從我dubug的print看到是正常的,
但是這樣是否只是把pointer所儲存的記憶體位置複製到arr這個陣列中咧?
在第二個while出來之後把arr的內容print出來都不是我要的值,
所以困擾不知道是哪裡出錯,不知道該怎麼改才能存放正確的內容進去arr裡面重排版,
所以還請各位高手幫我解答給我些意見,
文章有點長,感謝大家幫我看看。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.133.66
→
04/19 20:41, , 1F
04/19 20:41, 1F
→
04/19 20:41, , 2F
04/19 20:41, 2F
→
04/19 20:42, , 3F
04/19 20:42, 3F
→
04/19 20:42, , 4F
04/19 20:42, 4F
→
04/19 20:43, , 5F
04/19 20:43, 5F
→
04/19 20:44, , 6F
04/19 20:44, 6F
→
04/19 20:44, , 7F
04/19 20:44, 7F
→
04/19 20:45, , 8F
04/19 20:45, 8F
→
04/19 20:46, , 9F
04/19 20:46, 9F
→
04/19 20:51, , 10F
04/19 20:51, 10F
→
04/19 21:28, , 11F
04/19 21:28, 11F
→
04/19 21:28, , 12F
04/19 21:28, 12F
→
04/19 21:43, , 13F
04/19 21:43, 13F
→
04/19 21:55, , 14F
04/19 21:55, 14F
→
04/19 21:56, , 15F
04/19 21:56, 15F
→
04/19 21:59, , 16F
04/19 21:59, 16F
→
04/19 22:01, , 17F
04/19 22:01, 17F
→
04/19 22:01, , 18F
04/19 22:01, 18F
→
04/19 22:05, , 19F
04/19 22:05, 19F
→
04/19 22:05, , 20F
04/19 22:05, 20F