2012-10-17 57 views
3
for(i = 0; i < sizeof(buff); i++) if(buff[i] = ' ') ++num; 
char **parts[num]; 
char *p; 
p = strtok(buff, " "); 
int j = 0; 
while(p != NULL) 
{ 
     parts[j] = p; 
     j++; 
     p = strtok(NULL, " "); 
} 

分配編譯期間警告升高:從兼容的指針類型警告:從兼容的指針類型緩衝器

分配,其中份[J] = p是。

我能做些什麼?

+0

'p'是'字符*'和'部分[J]'是'字符* *'。 – chris

+0

但我想要一個指針數組指針 –

+0

指向一個指針數組的指針,你的意思是? – chris

回答

0
char *parts[num]; 

                 

你可以聲明指針的指針數組上面,像這樣宣稱:

char *(*ptr)[num] = &parts; 

但你並不需要這個額外用於存儲字符串數組的間接級別

+0

但我想要一個指針數組指針 –

+0

你可以把數組的地址:'&parts' – jspcal

+0

那麼代碼會如何呢? –

2

我假設你想在數組中存儲單個的令牌。正如當前聲明的那樣,parts是指向指針的指針數組。這不是你想要的C字符串數組 - 你需要刪除一個星號:

char *parts[num]; // This requires at least C99 

注意num需要在01開始,不是,因爲令牌的數量,你要get是比您在字符串中找到的空格數多一個。

一旦你這樣做,你的程序仍需要在它的strtok結果交易的方式有些固定:你應該店結果的strtok下一個電話後使用,因爲這些結果變得無效。

parts[j] = strdup(p); 
+0

當我嘗試它時仍然崩潰 –

+0

@OrrGoren您是否從'1'開始編輯了'num'? – dasblinkenlight

+0

是的,我做了,從j = 0更改爲j = 1。仍然無法工作。 –

0

你用你的實際代碼這一行:相反,你應該將它們存儲在parts陣列之前使令牌的副本?

for(i = 0; i < sizeof(buff); i++) if(buff[i] = ' ') ++num; 

您正在將整個緩衝區設置爲空格。並設置numsizeof(buff)

所以,換句話說,這可能不是你位置,你想:

char **parts[num]; 
相關問題