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

strcpy用来复制 to 的值x(*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"

不明白怎么回事。。。谢谢大家~

4

3 回答 3

2

致敬

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

  • 如果x是 a char,则使用pointeur->caractere = x(无需strcpy复制字符)。
  • 如果x是 achar*或 a char[],则声明caractere为具有足够长度的字符串(即使用数组char或动态分配的指针char),然后您可以调用strcpy.
于 2012-11-10T15:55:38.900 回答
0

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

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

在你的情况下:

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

使用这种形式不仅是因为它更好看,而且因为每个人都使用箭头,所以意思更明显。

2-strcpy复制字符串,而不是字符。字符串是字符数组,以 a0结尾,或指向它们的指针。因此,如果您想使用 strcpy,您需要将字段替换为包含字符串caractere的字段chaine,或者在将字符串caractere传递给strcpy. 但是,如果您只想复制字符,只需使用=.

3- 谨防误导性术语“字符”。ACchar实际上只是一个字节(此外,签名或不签名取决于您的平台)。对于通用文本,即除了 ASCII 之外的任何内容,一个实际字符(在日常、语言或编程意义上)可以用一个或多个代码表示,每个代码占用一个或多个字节 (C chars)。(参见维基百科上的UCSUnicode。)

于 2012-12-13T14:24:13.607 回答
0
strcpy((*pointeur).caractere, x);

这可以正常工作,但caractere应该是char *char[]

这是声明strcpy()

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

另请注意,如果您正在创建caracterechar*那么请确保为此分配内存,否则使用strcpy()将给出undefined behaviour或可能导致seg fault

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

于 2012-11-10T16:00:20.527 回答