2014-01-12 168 views
-2

似乎這是一個重複的問題,但我搜索計算器的問題,關於這一點和非就像是我的問題(我認爲)的strcpy()從一個結構複製到另一個字符串

我有2一個struct每個人都有自己的字符指針變量,當我試圖從一個變量的字符串複製到另一個變量的字符串,什麼都沒有發生,但不會出現任何錯誤,只是警告

implicit declaration of function strcpy 
incompatible implicit declaration of built-in function 'strcpy' 

我從計算器一些問題閱讀你最好使用strdup()函數而不是strcpy(),但是當我這樣做時,我有一個錯誤

too many arguments to function 'strdup' 

我讀了有一個與strcpy的問題(​​)被稱爲「段錯誤」,我知道這是關於內存分配,我不完全理解了它的準確,不知道這是否是我的代碼問題?

,這是我的代碼

struct p 
{ 
char *name; 
struct p *next; 
}; 
struct p *ptrary[10]; 

int main(void) 
{ 
    struct p p,q; 
    p.name="xyz"; 
    p.next=NULL; 
    ptrary[0]=&p; 

    strdup(q.name,p.name); 
    ptrary[1]=&q; 

    printf("%s\n",ptrary[1]->name); 
return 0; 
} 

所以有什麼問題,我該怎麼解決呢?

+3

添加'#包括'之前的代碼的其餘部分(並確保它在一個行本身)。 'strdup'不是標準的,但典型的用法是:'q.name = strdup(p.name);'。 –

+1

您是否嘗試閱讀函數的文檔?我敢打賭,它會告訴你什麼頭文件你必須包括使用它們。 – Barmar

+0

@JerryCoffin q.name = strdup(p.name);與我一起工作,而不包括新庫 – Salahuddin

回答

1

變化

strdup(q.name,p.name); 

q.name = strdup(p.name); 

see man page of strdup for further details。 strdup()函數返回一個指向新字符串的指針。

全碼:

#include <stdio.h> 
#include <string.h> 
struct p 
{ 
    char *name; 
    struct p *next; 
}; 
struct p *ptrary[10]; 

int main(void) 
{ 
struct p p,q; 
p.name="xyz"; 
p.next=NULL; 
ptrary[0]=&p; 

q.name = strdup(p.name); 
ptrary[1]=&q; 

printf("%s\n",ptrary[1]->name); 
return 0; 
} 
+0

是的,它與我合作,但與strcpy的問題? – Salahuddin

+1

爲什麼strcpy不能完成這項工作? – Salahuddin

+0

malloc'q.name'然後使用'strcpy' – sujin

相關問題