2013-02-24 65 views
1

我試圖使用以下函數將矢量轉換爲字符串。將矢量轉換爲c中的字符串

char* my_vect2str(char** input) 
{ 
    int i; 
    char* ret = (char*)xmalloc(sizeof(char*)); 
    for(i=0; input[i] != NULL; i++) 
    { 
     if(*input[i] == '\0') 
      ret[i] = ' '; 
     else 
      ret[i] = *input[i]; 
    } 
    ret[i] = '\0'; 
    return ret; 
} 

這似乎只是獲取向量中每個字符串的第一個字符。我如何改變我的for循環以正確工作?謝謝!

+3

你只是遍歷向量中的每個字符串並查看它的第一個字符。似乎你想要一個內部循環。 – 2013-02-24 23:13:08

+1

...看起來你需要比'sizeof char *'空間更多的結果。順便說一句:你實際上需要兩個循環:一個總和總長度,一個執行連接(或者:你必須重新分配至少一次) – wildplasser 2013-02-24 23:15:36

回答

0

你的malloc應該是指針內容的大小,而不是指針本身。您也不需要投射malloc void *。你需要一個內部循環計數器來迭代你指針的兩個維度。這應該工作:

char* my_vect2str(char** input) 
{ 
    int i; 
    int count = 0; 
    char* ret = (char*)malloc(sizeof(char*)); // should be a larger size 
    for(i=0; input[i] != NULL; i++) 
    { 
     int j = 0; 
     while(1){ 
      if(input[i][j] == '\0'){ 
       ret[count++] = ' '; 
       break; 
      }else{ 
       ret[count++] = input[i][j]; 
      } 
      j++; 
     } 
    } 
    ret[count] = '\0'; 
    return ret; 
} 
+0

line:for(j = 0; input [i] [j]! = NULL; J ++){ 是給誤差,它是一個指針和一個整數 – Stephen 2013-02-24 23:29:11

+0

很抱歉,之間的比較,我比較炭爲空值,它應該現在的工作。 – 2013-02-24 23:34:33

+0

什麼是while(true)? true未申報 – Stephen 2013-02-24 23:39:10

0

第一個循環計算輸入中字符串的總大小。然後,分配空間並將字符串連接在一起以ret。

char* my_vect2str(char** input) 
{ 
    int i, j, k = 0; 
    char* ret; 
    int size = 0; 
    int len; 
    char* inp = input[k++]; 

    while (inp != NULL) { 
     size += strlen(inp); 
     inp = input[k++]; 
    } 

    ret = malloc((size * sizeof(char)) + 1); 
    memset(ret, 0, size + 1); 

    i = 0; 
    j = 0; 
    while (i < size) { 
     if (input[j] != NULL) { 
      len = strlen(input[j]); 
      memcpy(&ret[i], input[j], len); 
      i += len; 
     } 
     ++j; 
    } 

    return ret; 
} 
+2

'char * inp = input;'inp指向什麼類型的數據?輸入指向什麼類型的數據? strlen期望inp指出什麼樣的數據? – Sebivor 2013-02-24 23:35:24

+0

歡迎使用堆棧溢出。太久之前請閱讀[常見問題]。提交代碼時需要小心。確保它編譯(沒有編譯器警告)並按預期工作是一個好主意。您的代碼在'char * inp = input;'行中有問題。另外,使用'strcpy()'甚至是'memmove()'將數據複製到目標數組會更簡單嗎? – 2013-02-24 23:45:52

+1

你們當然都是對的。我已經改變了答案,我爲自己的傲慢感到抱歉。我從這裏開始非常興奮,因此我遠遠超過了自己。 – 2013-02-25 00:03:52