이 함수는 c- 문자열의 복사본을 만드는 데 사용됩니다. 쓰기가 가능한 버전의 문자열 리터럴을 얻으려면 종종 필요합니다. 그것들 (문자열 리터럴) 자체는 쓰기 가능하지 않기 때문에 할당 된 쓰기 가능한 버퍼에 복사합니다. 그런 다음 주어진 인수를 수정하는 함수에 전달할 수 있습니다 (예 : strtok
). 토큰 화해야하는 문자열에 씁니다.
char * newstrdup(char const* str) {
char *c = new char[std::strlen(str) + 1];
std::strcpy(c, str);
return c;
}
당신은 그것을 한 번
delete[] *string;
를 사용하여 문자열을 사용하여 수행 무료로 가정 할 것이다 : 그것은
새로운
에서는 StrDup라고되어 있기 때문에
나는,이 같은 것을 가지고 올 수 있다고 생각
대체 쓰기 방법은 malloc
입니다. 라이브러리가 오래된 경우, 어떤 C++ C로부터 상속 된 것을 사용했을 수 있습니다
char * newstrdup(char const* str) {
char *c = (char*) malloc(std::strlen(str) + 1);
if(c != NULL) {
std::strcpy(c, str);
}
return c;
}
완료되면 지금, 당신은 free
를 사용하여 문자열을 무료로되어있다 :
free(*string);
는 첫 번째 버전을 선호 C++로 쓰고 있다면.그러나 기존 코드가 free
을 사용하여 메모리를 다시 할당하는 경우 두 번째 버전을 사용하십시오. 두 번째 버전은 문자열을 삭제할 수있는 메모리가없는 경우 NULL
을 반환하지만 첫 번째 예외는이 경우 예외를 throw합니다. 에 NULL
인수를 전달할 때 동작에 대한 또 다른 메모를 가져와야합니다. 라이브러리에 따라 허용되거나 허용되지 않을 수 있습니다. 따라서 필요한 경우 위의 기능에 적절한 검사를 삽입하십시오. POSIX 시스템에서 사용할 수있는 strdup
이라는 함수가 있지만 NULL
인수를 허용하지 않으며 메모리를 할당하기 위해 new 연산자 C++
도 사용하지 않습니다.
어쨌든, 나는 newstrdup
함수에 대한 Google codesearch를 살펴 보았으며 많은 것을 발견했습니다. 어쩌면 라이브러리 결과 중 하나입니다 :
Google CodeSearch, newstrdup
newstrdup() 함수를 붙여 넣을 수 있습니까? –
@ tinkertim : "일부 라이브러리 기능이 사용되는 오래된 프로그램이 있는데 그 라이브러리가 없습니다."... –
newstrdup가 사용되는 이전 코드를 붙여 넣을 수 있습니까? 루프 내부에 배치하는 것이 바람직합니다. .h 파일에서 newstrdup에 대한 선언이 있습니까? – jmucchiello