2012-02-21 5 views
5

다음 코드를 실행하려고하면 seg 오류가 발생합니다. 나는 gdb를 통해 실행하려고 시도했습니다. 오류가 printf 호출의 일부로 발생하고 있음을 알았지 만 정확히 작동하지 않는 이유는 분실했습니다. 내가 printf("%s\n", c);printf("%s\n", *type); 를 교체 할 경우printf에 char 배열에 대한 포인터를 주면 프로그램이 충돌합니다.

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

int main() { 
    char c[5] = "Test"; 
    char *type = NULL; 

    type = &c[0]; 
    printf("%s\n", *type); 
} 

은 내가 예상대로 인쇄 "테스트"얻는다. char 배열에 대한 포인터와 함께 작동하지 않는 이유는 무엇입니까?

+2

방금 ​​nitpick하고 싶습니다. C가 프로그램이 아니기 때문에 "C"가 중단되지 않았습니다. 컴파일러가 충돌하지 않았습니다. *** C를 사용하여 충돌하는 프로그램을 작성했습니다 *** –

+1

당신은 정확한 David입니다. 제가 말하고자하는 바를 알고 있습니다. 분명히 당신도 그렇습니다.하지만 이런 종류의 것들을 토론 할 때는 정확해야합니다. – WhiteHotLoveTiger

+0

'% s'을'% c' (으)로 변경하면 'c [0]'이 표시됩니다. – wulfgarpro

답변

15

charprintf을 역 참조하려고합니다. 대신이 시도 :

printf("%s\n", type); 
      ^

을 당신이 "나는 위치 T에서 문자열을 가지고있다"printf 말처럼 *type을 전달하는 경우.

type = &c[0]은 오해의 소지가 있습니다. 당신은 왜 그냥 :

type = c; 
+0

명확한 설명 주셔서 감사합니다. 내가 포인터의 교수형을 얻고 있다고 생각했을 때, 나는 그것을 조금 더 복습해야한다는 것을 깨달았다. – WhiteHotLoveTiger

5

type을 참조하지 마십시오. 포인터로 남아 있어야합니다.

4

printf에서 type의 역 참조를 제거하십시오.

관련 문제