我有一个字符串,我需要传递给下面的函数。
scanf("%s%d",&name,&telno);
addatend(telno,name);
其中
char name[MAX];
我收到以下警告:
warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[50]’ [-Wformat]
我确实尝试进行更改,例如再添加一个char
指针并指向name
。但警告仍然存在。
在函数中我有strcpy
strcpy(addnode->name,name1);
这是name
从main
到结构name
中的addnode
。但是这条线存在分段错误。
我试图检查夹板(这行没有任何问题)和valgrind,但无法识别我的错误。因此来到这里寻求帮助。提前谢谢..
代码:
typedef struct Mystruct{
char *name;
int telno;
struct Mystruct *nextp;
}data;
void addatend(int telno1, char* name1)
{
data *addnode, *previousnode;
addnode = malloc (sizeof(data));
if(addnode == NULL)
{
printf("Memory allocation failed...Exiting");
exit(0);
}
strcpy(addnode->name,name1); //error Part of the code.
答案 0 :(得分:3)
当使用scanf
读取字符串时,数组作为指针传递给函数,因此您不需要地址操作符&
。
关于你的第二个问题......你需要为你复制的目的地分配内存。在malloc
之前再次使用strlen(...) + 1
(使用+1
,strcpy
作为字符串终结符),或使用strdup
分配和复制字符串:< / p>
addnode->name = strdup(name1);
答案 1 :(得分:2)
您还可以使用零长度数组或灵活数组成员在结构中存储名称。但是,它必须是最后一个结构成员。以下是您如何申报。
typedef struct Mystruct {
int telno;
struct Mystruct *nextp;
char name[];
} data;
在函数中,你会做
data *addnode = malloc(sizeof(data) + strlen(name1) + 1);
strcpy(addnode->name, name1);