2014-01-12 1 views
-2

한 구조에서 문자열을 복사와 함께이 중복 질문 것 같다,하지만 난 그 시점에 대한 유래의 질문을 검색하고 비는 내가 두를했습니다 (내가 생각하는) 내 문제의 strcpy() 다른

에 같다 나는 다른 변수의 문자열로 하나 개의 변수의 문자열을 복사하려고 할 때 오류가 그냥 유래에 대한 몇 가지 질문에서 읽을

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

경고 표시되지 않지만 각 숯불하기 위해 자신의 포인터를 가지고있는 구조체의 변수는, 아무것도는 일어나지 않았다 strcpy() 함수 대신 strdup() 함수를 사용하는 것이 좋지만 내가했을 때 오류가 발생했습니다

"segmentation fault"라는 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

추가'사용법 #include '코드의 나머지 부분 전에 (그리고 한 줄에 단독으로의 확인). 'strdup'은 표준이 아니지만 일반적인 사용법은'q.name = strdup (p.name);'와 같습니다. –

+1

함수에 대한 설명서를 읽으려고 했습니까? 나는 그것을 사용하기 위해 어떤 헤더 파일을 포함시켜야 하는지를 알려줄 것입니다. – Barmar

+0

@JerryCoffin q.name = strdup (p.name); – Salahuddin

답변

2

strdup()는 인수를 하나만 사용합니다. 그것은 malloc의 것이고 중복 된 문자열을 담고있는 힙 메모리의 새로운 블록을 리턴한다. (https://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c을 참조하십시오.)

당신이 이전에 겪었던 문제를 지적했을 수도 있습니다. p의 내용을 복사하기위한 q 공간을 malloc 기억하고 있었습니까?

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