2011-10-04 53 views
1

我試圖聲明一個字符指針和一個結構內的雙字符指針像這樣使用它:從一個struct訪問雙指針和在execvp

typedef struct string3d { 
     char **x; 
     char *y; 
     } string3d; 

我聲明這個結構的陣列中的我的主程序,然後我解析字符串的輸入並標記它們並將它們傳遞給此結構。在主程序中,我調用一個函數來創建一個基本上分派兒童的過程。我傳遞這些字符串令牌execvp這樣的:

execvp(*s1->y,s1->x); 

這裏S1被定義爲

struct string3d *s1; 

,但在編譯時就這樣說:

有什麼建議?提前致謝。

+1

也許你的's1'不是指針?告訴我們它是如何定義的。 – nos

+0

s1被定義爲struct string3d * s1 – thefunkycoder

回答

2

函數的簽名是:

int execvp(const char *file, char *const argv[]); 

這相當於:

int execvp(const char *file, char **const argv); 

所以,你必須這樣稱呼它:

execvp(s1->y, s1->x); 

(假設s1s2有類型string3d *

+0

感謝您的回覆。我還有另一個問題。說我想分配 s1.x一個雙指針,如* c [32] 我試過s1.x = c似乎沒有工作。什麼是正確的做法? – thefunkycoder

1

您需要確保s1是一個指針,而不是一個結構。如果它是一個結構體,那麼你需要 s1.x和s1.y,而不是s1-> x和s1-> y。

+0

感謝您的回覆。我還有另一個問題。說我想分配 s1.x一個雙指針,如* c [32] 我試過s1.x = c似乎沒有工作。什麼是正確的做法? 再次感謝, – thefunkycoder

+0

如果c是一個字符*正確的事情將是&c,但它很難在評論中舉行這個討論。如果您需要進一步的回覆,請提出另一個問題。 – dbeer