strcpy((*pointeur).caractere, x);
我使用strcpy
将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
我无法理解出了什么问题...... 谢谢大家〜
答案 0 :(得分:2)
Salut !
caractere
是一个字符,strcpy
适用于字符串。根据你想要做的事情,有两种解决方案(使用你的标识符,我猜你是第一种情况)。
x
是char
,请使用pointeur->caractere = x
(无需strcpy
复制字符)。 x
是char*
或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。)