2012-01-28 3 views
0

런타임 오류가있어서 그 이유를 모르겠습니다.내 기능 코드에 오류가 있습니다. (작동을 멈춤)

void replace(char *str, char ch){ 
    int i=0; 
    while(*(str+i) != '\0'){ 
     if(*(str+i) == ' '){ 
      *(str+i) = ch; // I doubt in this line 
     } 
     i++; 
    } 
    cout << str << "\t"; 
} 

int main(){ 

    replace("Hello World",'_'); 

    return 0; 
} 
+2

가 왜 실행되지 않습니다 디버거에서 어떤 줄이 문제를 일으키는 지 알 수 있습니까? – Aziz

답변

2

읽기 전용 문자열 인 "Hello World"는 수정할 수 없습니다. STR 위에서 언급 한 바와 같이 일정 때문에 캔트 같은 수정할 수 : - - :

그것은 더 나은과 같이 작동합니다 :

char s[] = "Hello World!"; 
replace(s, "_"); 
2

"Hello world"는 즉 const char * 문자 스트링이다. 당신은 그것을 수정할 수 없습니다. 어떻게 컴파일합니까? const char *char *을 사용하는 함수에 전달할 수 없다고 말해야합니다.

편집 : 물론 솔루션을 제공해야합니다. kotlinski는 이미 그것을 지적했다 : char myString[] = "Hello World!"을 쓰면 문자열 리터럴의 복사본 인 char 배열이 생성 될 것이다. 자유롭게 수정할 수 있습니다 (단, 경계에서 벗어나지 않는 경우).

0

이 작동겠습니까

void replace(char *str, char ch){ 
int i=0; 
char * strnew= new char[strlen(str) +1]; 
strcpy(strnew,str); 
while(*(strnew+i) != '\0'){ 
    if(*(strnew+i) == ' '){ 
     *(strnew+i) = ch; // I doubt in this line 
    } 
    i++; 
} 
cout << strnew << "\t"; 
delete[] strnew; 
} 

int main() 
{ 
replace("Hello World",'_'); 
getch(); 
return 0; 
} 
+0

'strnew'는'delete'd를 어디에서 얻을 수 있습니까? – Johnsyweb

+0

@Johnsyweb 저를 고쳐 주셔서 고마워요 ... 코드를 수정했습니다 ... 안부 – Invictus

관련 문제