2012-12-10 50 views
0

我有一个字符串,我需要传递给像下面这样的函数。字符串和指针的问题

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

这是应对从mainnamename在结构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. 

回答

3

当读取与scanf一个字符串,该数组传递给函数的指针,所以你不需要地址的运营商&


关于你的第二个问题......你需要为你复制的目的地分配内存。无论是strcpy之前再次使用malloc(使用strlen(...) + 1,所述+1的字符串终止子),或使用strdup其中分配和复制字符串:

addnode->name = strdup(name1); 
+0

好,谢谢。我清除了警告但seg故障仍在。你想看完整的代码吗? – Shash

+2

@Shash你是否为'addnode' _and_'addnode-> name'分配了内存? –

+0

@Shash请编辑您的问题添加该代码,以及'数据'结构的定义。 –

2

。也可以使用零长度的数组或柔性阵列构件来存储在你的结构中的名字。但是,它必须是最后一个结构体成员。这是你如何申报的。

typedef struct Mystruct { 
    int telno; 
    struct Mystruct *nextp; 
    char name[]; 
} data; 

在功能上,你会做

data *addnode = malloc(sizeof(data) + strlen(name1) + 1); 
strcpy(addnode->name, name1);