앞/뒤에 공백문자를 안전하게 제거하려면 어떻게 하나요?
조회수 5649회
1 답변
-
const문자열이 아니라면
/* 이 함수는 인자로 들어온 스트링의 부분 스트링을 가리키는 포인터를 return합니다. 인자로 들어온 str이 동적할당 된거면 메모리 누수가 있을 수 있으니 별도로 처리를 해주세요! */ char *trimwhitespace(char *str) { char *end; // 앞의 공백제거 while(isspace(*str)) str++; if(*str == 0) // 스트링 전체가 공백문자면 return str; // 뒤의 공백문자 제거 end = str + strlen(str) - 1; while(end > str && isspace(*end)) end--; // 맨 뒤에 새로 null을 붙여줌 *(end+1) = 0; return str; }
const 문자열이라면
/* output buffer에 결과를 저장하기 때문에 output buffer를 충분히 크게 잡아주세요. 크기가 너무 작으면 결과가 잘려서 나옵니다 */ size_t trimwhitespace(char *out, size_t len, const char *str) { if(len == 0) return 0; const char *end; size_t out_size; // 앞의 공백제거 while(isspace(*str)) str++; if(*str == 0) // 스트링 전체가 공백문자면 { *out = 0; return 1; } // 뒤의 공백문자 제거 end = str + strlen(str) - 1; while(end > str && isspace(*end)) end--; end++; // output size의 크기를 정해줌 out_size = (end - str) < len-1 ? (end - str) : len-1; // 결과를 복사하고 맨 뒤에 새로 null을 붙여줌 memcpy(out, str, out_size); out[out_size] = 0; return out_size; }
댓글 입력