2012-11-10 87 views
2
strcpy((*pointeur).caractere, x); 

我用strcpyx值複製到(*pointeur).caractere我定義結構任何人都可以幫我解決這個結構/指針問題嗎?

typedef struct cle{ 
    char caractere; 
    int compteur; 
    struct cle *suivant; 
}cle_t; 

,並宣佈指針

cle_t *pointeur; 

但是編譯器告訴我,

"invalid conversion from 'char' to 'char*'"

"initializing argument 1 of `char* strcpy(char*, const char*)' "

我不明白什麼不順心...... 謝謝大家傢伙〜

+0

「x」是如何聲明的? – alk

+0

是這樣的:'char x ='a'' –

+0

'str *()'函數族在字符**數組**上工作。作爲最後一個元素攜帶「\ 0」的字符數組通常稱爲字符串。 – alk

回答

2

薩呂

caractere是一個字符,並且strcpy與字符串一起使用。有兩種解決方案,根據你想要做什麼(使用你的標識符,我猜你是在第一個案例中)。

  • 如果xchar,使用pointeur->caractere = x(無需strcpy複製字符)。
  • 如果xchar*char[],聲明caractere爲具有足夠的長度(即,具有的char數組或指針char動態分配)的字符串,然後可以調用strcpy
+0

@Daniel Fischer:謝謝你的評論;對不起。我會糾正它。 – md5

+0

沒有理由感到抱歉。德里恩。 –

+0

Salut,merci pour taréponse... –

0
strcpy((*pointeur).caractere, x); 

這將正常工作,但caractere應該是一個char *char[]

這裏是strcpy()

char *strcpy(char *dest, const char *src); 

該宣言還指出,如果要創建caracterechar*然後請務必使用strcpy()爲此明確分配內存將給予undefined behaviour否則可能導致seg fault

一兩件事:如果你是一個指針struct那麼你可以直接使用->操作符來訪問數據成員

+0

感謝您的回覆,是的,這工作正常,但我只是想使用字符,如果我使用char *或char [],這是另一個工作的東西......無論如何謝謝你.... –

0

1語法: 你有一個指向struct和然後訪問它的字段:這種情況非常普遍,C提供了''語法親切''(du''mique syntaxique'';恩既成事實L'表達réelleEST'語法糖',JE plaisante):

(p_struct*).field 
// --> 
p_struct->field 

你的情況:

strcpy((*pointeur).caractere, x); 
// --> 
strcpy(pointeur->caractere); 

使用這種形式,不僅因爲它是更好的,而是因爲每個人使用箭頭,所以意思更明顯。

2- strcpy複製字符串,而不是字符。字符串是字符數組,末尾有0或指向它們的指針。因此,如果您想使用strcpy,則需要將字段caractere替換爲保存字符串的字段chaine,或者在將它傳遞到strcpy之前從caractere開始動態創建字符串。但是如果你只想複製字符,只需複製=即可。

3-注意誤導性術語「字符」。一個C char實際上只是一個字節(此外,無論是否簽署,取決於您的平臺)。對於通用文本,除ASCII以外的任何內容都可以用一個或多個代碼表示一個實際字符(在evryday,語言或編程意義上),每個代碼佔用一個或多個字節(C char s)。 (請參閱UCS & Unicode on wikipedia。)

相關問題