2014-10-07 1 views
-2

조금 혼란 스럽습니다. 내가 다음 코드는 작동하지 않는 순수한 C.에 쓰기 :문자 배열 요소를 인쇄 할 수 없습니다.

char arr[] = "0x123"; 
printf(arr[0]); 

그냥 예입니다.

IDE (Code :: Blocks)가 다음을 생성합니다. 프로그램 수신 신호 SIGSEGV, Sigmentation fault.

왜이 코드가 작동하지 않습니까?

+3

'때문에 printf'가 기대 포인터 :이 배열의 0 번째 문자의 printf이 같이 보일 것을 의미한다. – juanchopanza

+0

printf 구문을 확인하십시오. –

답변

1

사용

printf("%c",arr[0]); 

는 LLVM/연타를 사용하는 경우, 컴파일러는 오히려 자명 경고를 발행합니다

+1

이것은 올바른 조언이지만 기존 코드가 잘못된 이유에 대한 설명이있는 경우 더 낫습니다. 다른 옵션으로'printf ("% s \ n", arr);을 언급 할 수 있습니다. –

2

배열의 첫 번째 요소를 얻을 수 있습니다 :

test.c:3:9: warning: format string is not a string literal (potentially insecure) [-Wformat-security] 
     printf(a[0]); 

그것을 첫 번째 인수로 서식 문자열을 제공해야한다는 것을 의미합니다. printf("%c", arr[0]);

1

printf 함수에 사용 된 인수가 올바르지 않으므로 수행하려는 작업이 올바르지 않습니다. 당신이 볼 수 있듯이,

printf (const char * format, ...) 

는 형식 문자열 적어도 하나 개의 인수를 필요로하고 추가 인수의 수를 취할 수 줄임표 (...)로 표시된 바와 같이 : printf은 다음과 같이 호출된다.

형식 문자열에 형식 지정자이 포함될 수 있으며 추가 인수 값이 인쇄됩니다. 형식 지정자와 추가 인수는 숫자와 유형이 일치해야합니다.

잘못된 것은 잘못된 형식 문자열을 제공 한 것입니다. 배열의 문자를 인쇄하려면 형식 문자열은 문자의 형식 지정자 인 %c을 포함하는 형식이어야합니다. 또한 실제 값을 추가 인수로 제공해야합니다. 널로 끝나는 문자열이 아닌 하나의 문자에

printf("%c", arr[0]);