[問題] string token 及calloc
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
stdio
問題(Question):
這是個面試題目,題面就是給str_parser Function,
及main下的src及dst_token,
主要目的是在function內malloc給傳進來的dst_token指標
陣列,將token的字串放在指標中,並在main中做free
現在遇到的問題是,
執行到free時,沒指向同一塊dst_token記憶體,所以free錯誤
請版上的大大指教
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int str_parser(const char *src, char *dst_token[], int max_token_count) {
if(src == NULL || max_token_count <=0){
return -1;
}
char src_char[26];
memset(src_char, 0, sizeof(src_char));
strcpy(src_char, src);
int count = 0;
char *delim = " ";
char *p;
printf("1, %s\n", src_char);
p = strtok(src_char, delim);
while(p != NULL) {
printf("%d\n", count);
if(count > 3){
printf("token count(%d) > max token count(%d)\n",
count, max_token_count);
return 0;
}
dst_token[count] = (char*) calloc(sizeof(char), 12);
printf("dst_token[%d] = address %x\n", count, dst_token[count]);
if(dst_token[count] == NULL){
printf("Calloc error in count(%d)\n", count);
return -1;
}
dst_token[count] = p;
printf("token string %s, p %s\n", dst_token[count], p);
count++;
p = strtok(NULL, delim);
}
return 0;
}
int main() {
char *src = "a bb ccc";
char *dst_token[100];
int ret = 0;
int i = 0;
ret = str_parser(src, &dst_token, 100);
for(i=0; i<3; i++){
if(ret == 0) {
printf("free %d %x, %s\n", i, dst_token[i], dst_token[i]);
free(dst_token + i);
}
}
return 0;
}
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.94.102
※ 編輯: wtuxxj 來自: 220.134.94.102 (02/21 11:39)
→
02/21 13:22, , 1F
02/21 13:22, 1F
→
02/21 14:28, , 2F
02/21 14:28, 2F
→
02/21 14:51, , 3F
02/21 14:51, 3F
推
02/21 18:49, , 4F
02/21 18:49, 4F
→
02/21 20:15, , 5F
02/21 20:15, 5F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章