2012-11-10 88 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。)

相关问题