2016-10-10 4 views
-1

, ASCII 문자 '1'을 기대문자 배열을 표시하는 방법은 무엇입니까? 아래의 코드에서

#include<stdio.h> 
int main(){ 
    char string[] = {1, 2, 3}; 
    char* my_pointer = string; 
    printf("%c", *my_pointer); 
} 

암이 화면에 표시된다.

char string[] = {'1', '2', '3', '\0'}; 

을하거나 문자열

char string[] = "123"; 

을 사용하여 초기화 할 수 있습니다 : 초기화 할 때 00110001

+2

1은 같지 않습니다. 49 –

+0

@ChristopherSchneider typo. 'string'은'char' 배열이기 때문에'1 '로 타입 캐스팅 될 것으로 예상됩니다. – overexchange

+1

오타가 없습니다. 값 1로 char을 입력하고 49 ('1')로 인쇄하려고합니다. –

답변

4

당신은 그것에게 문자를 줄 필요로

ASCII 문자 '1'은 바이너리 표현으로 49입니다

과 같은 숫자를 사용하십시오.
char string[] = {1, 2, 3}; 

숫자 1에 해당하는 ASCII 문자가 인쇄됩니다 (출력을 생성하지 않을 가능성이 큽니다).

당신이 번호를 사용하여 초기화 할 경우

, 당신은 수행해야합니다

char string[] = {49, 50, 51}; 
+0

왜 '1'대신에 '1'을 주어야합니까? C는 느슨하게 형식화 된 언어입니다.'1'은'string'이'char' 배열이기 때문에'1 '로 타입 캐스트되어야합니다. – overexchange

+0

구문' '1'은 숫자 49와 같은 '1'문자에 해당합니다. 문자의 구문을 사용하십시오. 'a'는 문자를위한 것이다 – 4386427

+0

오, 당신은 'SOH' 문자가 ASCII 차트에서'1' 값을 가지므로 인쇄 할 수 없다는 것을 의미합니다 – overexchange

0

귀하의 라인

char string[] = {1, 2, 3}; 

세 정수 리터럴로 초기화 세 char 값의 배열을 선언합니다. char 리터럴로 초기화하려면 작은 따옴표 연산자 '을 아래와 같이 사용하십시오. 당신은 내가 위에서했던 것처럼 null 종결을 포함 할 필요가 배열을 초기화하는 경우, 그렇지 않으면 printf에 전화가 정의되지 않은 동작이 발생할 것으로

char string[] = {'1', '2', '3', '\0'}; 

참고. 위의 답변 중 하나에 대한 귀하의 의견은

왜 1 대신에 1을 제공해야합니까? C는 느슨하게 입력 된 언어입니다. 이 문자열이 문자 배열 때문에 1 유형은 '1'로 주조되어야

후드 아래 char 숫자 단지 표현 기억; '문자 리터럴'구문은보다 의미 론적 인 방법으로 문자 상수를 만들 수있는 구문 설탕입니다.

char variable1 = 49; 
char variable2 = '1'; 

이 경우 두 문은 완전히 동일합니다. C가 제안한 방식대로 캐스트해야한다면 49을 4, 9 또는 아마도 "49"문자열로 변환해야합니까? 이것은 불분명하다. C는 게으른 언어입니다. 여러분을 돕기 위해 어떤 영리한 속임수도하지 않으므로 char을 49로 설정하면 숫자 값이 할당됩니다.

관련 문제