任何人都可以帮我解决这个结构/指针问题吗?

时间:2012-11-10 15:53:11

标签: c pointers struct

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

我使用strcpyx的值复制到(*pointeur).caractere并定义结构

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

并声明指针

cle_t *pointeur;

但是编译器告诉我

  

“从'char'无效转换为'char *'”

  

“初始化`char * strcpy(char *,const char *)'”

的参数1

我无法理解出了什么问题...... 谢谢大家〜

3 个答案:

答案 0 :(得分:2)

Salut

caractere是一个字符,strcpy适用于字符串。根据你想要做的事情,有两种解决方案(使用你的标识符,我猜你是第一种情况)。

  • 如果xchar,请使用pointeur->caractere = x(无需strcpy复制字符)。
  • 如果xchar*char[],请将caractere声明为具有足够长度的字符串(即使用char数组或指向char动态分配的指针),然后您可以调用strcpy

答案 1 :(得分:0)

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

这样可以正常工作,但caractere应为char *char[]

这是strcpy()

的声明
char *strcpy(char *dest, const char *src);

另请注意,如果您要将caractere创建为char*,请务必使用strcpy()为{}}}分配内存以提供undefined behaviour,或者可能导致seg fault {1}}

还有一件事:如果您指向struct,那么您可以直接使用->运算符来访问数据成员

答案 2 :(得分:0)

1-语法: 你有一个指向结构的指针然后访问它的字段:这种情况很常见,以至于C提供了''syntactic honey''(du''miel syntaxique''; en fait l'expressionréelleest''syntactic sugar'', je plaisante):

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

在你的情况下:

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

使用此表单不仅因为它更好,而且因为每个人都使用箭头,所以意义更明显。

2- strcpy复制字符串,而不是字符。字符串是字符数组,最后有0或指向它们的指针。因此,如果您想使用strcpy,则需要将字段caractere替换为包含字符串的字段chaine,或者在将caractere传递给字符串之前立即创建字符串strcpy。但是,如果您只想复制char,只需使用=复制它。

3-注意误导性的术语“角色”。 C char实际上只是一个字节(此外,根据您的平台签名或不签名)。对于通用文本,这不是ASCII,实际字符(在文学,语言或编程意义上)可以用一个或多个代码表示,每个代码占用一个或多个字节(C char s)。 (请参阅维基百科上的UCS& Unicode。)