저는 C 문자열 (char *)에서 작동하는 몇 가지 기본 함수를 작성하기 위해 malloc, realloc 및 free를 사용하고 있습니다. 문자열에서 마지막 문자를 지울 때이 이상한 문제가 발생했습니다. 나는 그런 프로토 타입 함수를 썼다 : 하나 개의 문자에 의해 "DST"문자열을 단축하기로했다동적 메모리 할당 + 문자열 문제 잘림
int string_erase_end (char ** dst, size_t size);
. 지금까지이 코드와 함께 올라와있다 : 주에서
int string_erase_end (char ** dst, size_t size)
{
size_t s = strlen(*dst) - size;
char * tmp = NULL;
if (s < 0) return (-1);
if (size == 0) return 0;
tmp = (char*)malloc(s);
if (tmp == NULL) return (-1);
strncpy(tmp,*dst,s);
free(*dst);
*dst = (char*)malloc(s+1);
if (*dst == NULL) return (-1);
strncpy(*dst,tmp,s);
*dst[s] = '\0';
free(tmp);
return 0;
}
()를, 내가 문자열을자를 때 (예, 이전에 그들에 malloc을 호출), 나는 이상한 결과를 얻을 수 있습니다. 잘라낼 문자 수에 따라 OK 또는 잘 못된 문자 수가 잘 리거나 조각 모음 오류가 발생합니다.
동적 메모리 할당에 대한 경험이 없으며 항상 C++ 및 std :: string을 사용하여 이러한 모든 더러운 작업을 수행했지만 이번에는 C에서이 작업을 수행해야합니다. 누군가가 나를 도와 주면 감사하겠습니다. 내 실수를 찾아서 바로 잡으십시오. 미리 감사드립니다.
그런데, (s <0) ...이 절대로 맞지 않는다면. –
올바른 것으로 보입니다. – Hazior
감사합니다. 이제 완벽하게 작동합니다. 다음 번에는 '\ 0'문자를 고려해야합니다. – mingos