2010-04-22 4 views
3

다음은 문자 배열의 두 문자를 서로 바꾸는 간단한 함수입니다. 그러나 Bla.exe에서 0x01151cd7에 처리되지 않은 예외가 발생합니다. 0xC0000005 : 0x011557a4 위치에 액세스 위반이 기록됩니다. " 오류. 두 인덱스 (왼쪽 및 오른쪽)는 배열의 한도 내에 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?char의 스왑 함수 *

void swap(char* s, int left, int right) { 
    char tmp = s[left]; 
    s[left] = s[right]; 
    s[right] = tmp; 
} 

swap("ABC", 0, 1); 

비 관리 C/C++의 VS2010을 사용하고 있습니다. 감사!

+0

"ABC"는 유형이'const를 문자 [4 ]'로 변환되어'const char *'로 안전하게 변환 될 수있다. 단순히 'char *'로의 변환은 더 이상 사용되지 않지만 암시 적입니다. – GManNickG

+0

당신의 컴파일러는'const char *'에서'char *'로 비추천 캐스팅에 대한 경고를 여러분에게 주어야합니다. 귀하의 컴파일러 들어요! –

+0

또한 'int'보다는 배열 인덱스와 오프셋을 저장하기 위해'size_t' 타입을 사용해야합니다. –

답변

8

문자열 리터럴을 수정할 수 없습니다. 대신이 시도 :

char s[] = "ABC" 
swap(s, 0, 1); 
printf("%s\n", s); 
+0

이것은 맞습니다. 다음 코드를 사용하여 호출하십시오 : char swapStr [3] = "ABC"; swap (swapStr, 0,1) – TerrorAustralis

+0

+1 : 몇 초 만에 답장 해주세요. –

+0

여러분 감사합니다! 그것은 작동합니다! – Martin

1

"ABC"는 변경할 수 없습니다, 그래서 어셈블리를 참조하십시오의 RODATA 섹션에 :

 .section  .rodata 
.LC0: 
     .string "ABC"