2012-11-18 4 views
3

가능한 중복 :
What is the difference between char s[] and char *s in C?
Why does this program give segmentation fault?버스 오류 (10)

여기

코드입니다 :

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 

void reverse(char *c){ 
    int len = strlen(c); 
    char tmp; 
    int i; 
    for(i = 0; i < len; i++){ 
     tmp = c[len-1-i]; 
     c[len-1-i] = c[i]; 
     c[i] = tmp; 
    } 
} 

int main(){ 
    char *s = "antonio"; 
    //printf("%zd\n", strlen(s)); 
    reverse(s); 
    printf("%s\n", s); 
    return 0; 
} 
문제는 역에

(문자 * c), 그것을 문자열 광고 반전,하지만 난 이해가 안 돼요 어디로 g 잘못된 것.

+2

문자열 리터럴을 수정하려고합니다. 이것은 정의되지 않은 동작이며 일반적으로 충돌합니다. –

+2

컴파일러 경고를 사용하지 못하거나주의를 기울이지 않았습니다. 모든 경고가 활성화 된 상태에서 코드를 다시 컴파일하고 컴파일러에서 알려주는 모든 내용을 이해했는지 확인하십시오. 자동화 된 도구를 사용하면 도움이 필요하기 전에 아주 먼 길을 가질 수 있습니다! –

+0

@KerrekSB 경고를받지 못했습니다. 컴파일러의 모든 경고를 활성화하는 방법을 보게됩니다. – AR89

답변

5

여기에이 버그가 있습니다

1) 당신은 정의되지 않은 동작에 이르게 리터럴 문자열을 변경하려고하는

은, 귀하의 경우 버스 오류로 명시가.

for(i = 0; i < len; i++) 

당신거야 이런 식으로 :

변경

char *s = "antonio"; 

char s[] = "antonio"; 

2) 또한

에 당신은 전체 문자열 길이에 대한 루프 카운터를 실행하는 원점으로 돌아 가라. inal 문자열. 원하는 문자의 절반 만 다른 문자로 바꿔야합니다.

for(i = 0; i < len/2; i++) 
+0

가능한 복제본 http://stackoverflow.com/a/3735133/635608 – Mat

+0

@Mat : 감사합니다. 찾고 있습니다. – codaddict

+0

@codaddict 차이점은 무엇입니까? char * s = "antonio"; char s [] = "antonio"; char s * = malloc (size) ;? 나는 그 함수 (char a [])가 함수가되었다는 것을 안다. (char * a),이 경우 어떻게 될까? – AR89

관련 문제