string replace인데 core가 발생하네요

bugger의 이미지

안녕하세요.
string replace 테스트를 하는데
프로그램이 죽습니다.

gdb로 실행시키면 죽지 않고 결과가 나오는데
쉘에서 실행시키면 core 발생하고 죽네요

자꾸 여기서 죽데요... 문법으로는 맞지 않나요?
*s = repl_chr;

---------- 원본 소스----------------------
#include <stdio.h>
#include <string.h>

int strreplace(char *s, char chr, char repl_chr)
{
int idx=0;
int count = 0;

if(*s=='\0' && s==NULL)
return -1;

for (; *s; s++)
if (*s == chr) {
*s = repl_chr; // ------> 이부분에서 세그먼트 falut가 발생합니다.
count++;
}
return count;
}

int main()
{
int num;
char *cp="string replace test ";

num=strreplace(cp,' ',',');
printf("a=%d, cp=%s\n",num,cp);

return 0;
}

doldori의 이미지

char *cp="string replace test ";

여기가 잘못되었습니다. cp가 가리키는 문자열은 변경할 수 없는 것인데 치환 함수 내에서
변경을 했기 때문입니다. 포인터가 아니라 배열로 선언하세요. 그러면 문자열이 배열로
복사되기 때문에 변경이 가능합니다.

char cp[]="string replace test ";

참고로 이런 실수를 방지하기 위해서 포인터로 쓸 때는

const char *cp="string replace test ";

로 하는 것이 좋습니다.

익명 사용자의 이미지

네 고맙습니다.