2012-12-22 59 views
0

我遇到以下代碼的問題(我不知道splitString函數是否工作,因爲我在調用它時遇到seg錯誤)。該代碼是:C數組傳遞

#include <stdio.h> 
// 
//  Split String 
// 
int splitString(char** ret,char* instr, char* fence,int max) { 
     char* p; 
     int count=0; 
     char* sinstr; 
     char* cp; 
     int i=0; 

     while(i<max) { 
       cp=ret[i]; 
       p=fence; 
       sinstr=instr; 
       while(1) { 
         if (*p=='\0') { 
           *cp='\0'; 
           instr=sinstr; 
           break; 
         } 
         if (*p==*sinstr) { 
           p++; 
           sinstr++; 
           continue; 
         } else { 
           *cp=*instr; 
           cp++; 
           instr++; 
           break; 
         } 
       } 
       i++; 
     } 
     *cp='\0'; 
     return count; 
} 
int main (int argc, char* const argv[]) { 
     char *strs[128]; 

     char* in="test.txt"; 
     splitString(strs,in,".",2); 
     printf("fn: %s, ext: %s\n",strs[0],strs[1]); 
} 

無論是splitString函數調用和printf的GET賽格故障(printf的得到的錯,如果我註釋掉調用splitString)。

我想要做的是根據子字符串拆分字符串。該函數應該返回作爲第一個參數傳遞給函數的數組中的子串。我知道我忽略了一些非常明顯的東西,但是我的C技巧非常生疏。欣賞任何指導。

回答

2
當然

,要傳遞的STR中,並且它沒有被初始化,並且splitstring是假設該陣列所指向的實際字符串,但是這將是不論其initliazed至(未定義的行爲)

+0

您儘快打這個。由於'strs'是單位化的,'ret [0]'包含垃圾。因此'cp'包含垃圾,'* cp'會導致錯誤。 –

+0

謝謝。我只是把自己打在腦袋裏。我知道這很明顯。使用PHP太多了! – mlewis54

0

128個陣列在你的strs [128]中沒有被初始化/分配。

儘管如此,您正在引用它們,然後將數據寫入他們實際指向的地址,這可能是此時的任何事情。

你可以在你的split函數中動態地分配它們,以便它們可以適合每個子字符串,因爲你正在將指針傳遞給你函數的指針。 `;

0

當你爲'CP = RET [I]您應該分配您的陣列,(主或功能)

char *strs[128];