조금 혼란 스럽습니다. 내가 다음 코드는 작동하지 않는 순수한 C.에 쓰기 :문자 배열 요소를 인쇄 할 수 없습니다.
char arr[] = "0x123";
printf(arr[0]);
그냥 예입니다.
IDE (Code :: Blocks)가 다음을 생성합니다. 프로그램 수신 신호 SIGSEGV, Sigmentation fault.
왜이 코드가 작동하지 않습니까?
조금 혼란 스럽습니다. 내가 다음 코드는 작동하지 않는 순수한 C.에 쓰기 :문자 배열 요소를 인쇄 할 수 없습니다.
char arr[] = "0x123";
printf(arr[0]);
그냥 예입니다.
IDE (Code :: Blocks)가 다음을 생성합니다. 프로그램 수신 신호 SIGSEGV, Sigmentation fault.
왜이 코드가 작동하지 않습니까?
사용
printf("%c",arr[0]);
는 LLVM/연타를 사용하는 경우, 컴파일러는 오히려 자명 경고를 발행합니다
이것은 올바른 조언이지만 기존 코드가 잘못된 이유에 대한 설명이있는 경우 더 낫습니다. 다른 옵션으로'printf ("% s \ n", arr);을 언급 할 수 있습니다. –
배열의 첫 번째 요소를 얻을 수 있습니다 :
test.c:3:9: warning: format string is not a string literal (potentially insecure) [-Wformat-security]
printf(a[0]);
그것을 첫 번째 인수로 서식 문자열을 제공해야한다는 것을 의미합니다. printf("%c", arr[0]);
printf
함수에 사용 된 인수가 올바르지 않으므로 수행하려는 작업이 올바르지 않습니다. 당신이 볼 수 있듯이,
printf (const char * format, ...)
는 형식 문자열 적어도 하나 개의 인수를 필요로하고 추가 인수의 수를 취할 수 줄임표 (...
)로 표시된 바와 같이 : printf
은 다음과 같이 호출된다.
형식 문자열에 형식 지정자이 포함될 수 있으며 추가 인수 값이 인쇄됩니다. 형식 지정자와 추가 인수는 숫자와 유형이 일치해야합니다.
잘못된 것은 잘못된 형식 문자열을 제공 한 것입니다. 배열의 문자를 인쇄하려면 형식 문자열은 문자의 형식 지정자 인 %c
을 포함하는 형식이어야합니다. 또한 실제 값을 추가 인수로 제공해야합니다. 널로 끝나는 문자열이 아닌 하나의 문자에
printf("%c", arr[0]);
'때문에 printf'가 기대 포인터 :이 배열의 0 번째 문자의
printf
이 같이 보일 것을 의미한다. – juanchopanzaprintf 구문을 확인하십시오. –