2012-10-17 1 views
-1

초보자입니다. 왜 그런지 몰라? Q = 'W이'가 인쇄되면


enter image description here
enter image description here
enter image description here
enter image description here



: 나는 코드 : Blocks.Please를 사용하고있어 다음 코드를 읽고 out W.
q = "W " 인 경우 $을 출력합니다.

+0

오류가 발생합니다. GCC 4.7.2는'error : C++의 경우 'const char *'에서 'char'[-fpermissive]'로의 잘못된 변환을 제공하고 'error : 초기화는 C에 대해'캐스트없이 포인터에서 정수를 만듭니다. ' – chris

+6

'W '는 문자입니다. , "W"는 2 문자 배열 ('W'와 '\ 0')에 대한 포인터입니다. – aland

+0

C 또는 C++로 결정, C++에서는 문자열을, C에서는 C 문자열을 찾습니다 (char 배열, 문자열의 마지막 문자 0 Byte (Ascii의 경우 0x30 인 문자와 다른 점) 다음은 문제를 해결하는 데 도움이 될 수 있습니다. 그렇지 않으면 문제는 정확히 @aland가 설명한 것입니다 – ted

답변

4

문자 적 ​​"W"는 하나의 char 아니라 널 종료 문자열 'W''\0' 구성.

한 가지 방법은 const char*에 할당하고 댓글에서 지적 %s

const char* q = "W"; 
printf("%s", q); 

와 그를 인쇄하여 원하는 동작을 얻기 위해, 당신은 당신의 컴파일러의 경고 수준을 증가시켜 이러한 유형의 오류를 잡을 수 있습니다.

2
char q = "W"; 

경고 수준을 설정하면 컴파일러에서 이에 대해 불평해야합니다. 'W'은 문자가 아니며 문자열 리터럴입니다. 형식은 char [2] ('W'와 '\ 0'의 두 문자 배열)입니다.이 문자는 첫 번째 문자의 포인터로 쇠퇴하고 변환됩니다 char으로, 단지 '$'의 ASCII 값으로 변환됩니다.

문자열 리터럴을 인쇄하려면 올바른 형식 지정자는 %s입니다.

4

진술서

char q = "W"; 

char 행 어드레스의 값을 "W" 리터럴 스트링의 어드레스를 취하고, 캐스트, 즉, 어드레스의 최하위 바이트 c 할당된다.

귀하의 경우, "W"의 주소는 예 : 0x12345624이고, 0x24, 즉 '$'으로 변환됩니다.

+0

좋은 대답은 여기에서 일어나는 일입니다. – pradipta