字符串和指针的问题

时间:2012-12-10 10:23:25

标签: c

我有一个字符串,我需要传递给下面的函数。

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);

这是namemain到结构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.

2 个答案:

答案 0 :(得分:3)

当使用scanf读取字符串时,数组作为指针传递给函数,因此您不需要地址操作符&


关于你的第二个问题......你需要为你复制的目的地分配内存。在malloc之前再次使用strlen(...) + 1(使用+1strcpy作为字符串终结符),或使用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);