c언어 질문있습니당~!
조회수 804회
메인함수에 정의된 str 문자열 내에서 공백문자를 없애고 출력을 하려했습니다. erase_blanks함수를 통해서요. 이때, erase_blanks함수 내에서 temp변수를 정의하여 공백을 제거한 문자열을 복사했습니다. 그리고 str에 temp의 주소값을 넘겨주고 이 함수를 빠져나가면 temp는 지역변수라 사라져 결과값은 띄어쓰기 있게 나오게 되었습니다. 어떻게 수정해야 할까요? ㅠ
void erase_blanks(char* str) {
char* temp = (char*)malloc(sizeof(char)*BUFFER_LENGTH);
int i = 0;
int j = 0;
while (str[i] != '\0') {
if (str[i++] != ' ') {
temp[j++] = str[i - 1];
}
}
temp[j] = '\0';
str = temp;
}
int main(void) {
char* str = "aef aefe e ";
erase_blanks(str);
printf("%s", str);
return 0;
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
문자열 복사에는
<string.h>
의strcpy()
를 사용합니다.
함수 원형은 다음과 같습니다.#include <string.h> char *strcpy(char *string1, const char *string2);
string2를 string1에 복사하는 라이브러리 함수이며 string2에는 널 문자(\0)를 포함해야 합니다.
다음과 같이 바꿔보세요.
void erase_blanks(char* str) { char* temp = (char*)malloc(sizeof(char)*BUFFER_LENGTH); int i = 0; int j = 0; while (str[i] != '\0') { if (str[i++] != ' ') { temp[j++] = str[i - 1]; } } temp[j] = '\0'; strcpy(str, temp); } int main(void) { char str[BUFFER_LENGTH] = "aef aefe e "; erase_blanks(str); printf("%s", str); return 0; }
댓글 입력