programing

강박 대 강박.

prostudy 2022. 5. 11. 22:00
반응형

강박 대 강박.

난 그걸 읽었다.strcpy문자열을 복사하기 위한 것이며strdup새 문자열로 포인터를 반환하여 문자열을 복제하십시오.

어떤 케이스를 사용하고 싶으신지 설명해 주시겠습니까?strcpy어떤 경우를 사용하시겠습니까?strdup?

strcpy(ptr2, ptr1)와 같다while(*ptr2++ = *ptr1++)

질질 끄는 것과 같은 경우

ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);

(memcpy 버전이 더 효율적일 수 있음

따라서 복사한 문자열이 힙 섹션에서 생성되므로 다른 함수에 사용되도록 하려면 strupping을 사용하면 된다.

기능strcpy그리고strncpyC 표준 라이브러리의 일부로서 기존 메모리에서 작동한다.즉, 함수가 문자열 데이터를 복사하는 메모리를 제공해야 하며, 코롤러리로서 필요한 메모리가 어느 정도인지 알아낼 수 있는 자신만의 방법이 있어야 한다.

항상 그렇듯이,strdupPosix 함수로 동적 메모리 할당을 수행함.그것은 문자열을 복사한 새로 할당된 메모리로 포인터를 되돌린다.하지만 이제 당신은 이 기억의 책임을 져야 하고 결국에야free그럭저럭

그렇게 되다strdup「hidden」의 한 사람.malloc"편리함수, 그리고 그것이 아마도 그것이 표준 도서관의 일부가 아닌 이유일 것이다.표준 라이브러리를 사용하는 한, 당신은 반드시 하나를 호출해야 한다는 것을 알고 있다.free매사에malloc/calloc. 그러나 다음과 같은 기능들strdup감춰진 것을 소개하다.malloc, 그리고 당신은 그것을 a와 동등하게 취급해야 한다.malloc메모리 관리를 목적으로 하는 것. (또 다른 숨겨진 할당 기능은 GCC의 것이다.abi::__cxa_demangle().) 조심하라!

strdup를 사용하는 동안 힙의 새 문자열에 대해 메모리 할당strcpy(또는 더 안전하다)strncpyvarient) 힙이나 스택의 사전 할당된 메모리에 문자열을 복사할 수 있다.

수용된 답변에서, 의 이행은 다음과 같다.strdup다음과 같이 제시된다.

ptr2 = malloc(strlen(ptr1)+1);
strcpy(ptr2,ptr1);

그러나, 그것은 두 가지 모두 그렇기에 다소 차선책이다.strlen그리고strcpy각 문자가 a자인지 확인하여 문자열 길이를 찾을 필요가 있다.\0.

사용.memcpy더 효율적이어야 한다:

char *strdup(const char *src) {
    size_t len = strlen(src) + 1;
    char *s = malloc(len);
    if (s == NULL)
        return NULL;
    return (char *)memcpy(s, src, len);
}

char *strdup(char *pszSrch);

strdup저장소에 원래 문자열 크기를 할당한다.스토리지 할당이 성공하면 원본 문자열이 중복 문자열로 복사된다.

strdupd 리턴NULL실패하여메모리를 할당하지 않으면 복사가 실패함strdup돌아오다NULL.

참조URL: https://stackoverflow.com/questions/14020380/strcpy-vs-strdup

반응형