초보자입니다. 왜 그런지 몰라? Q = 'W이'가 인쇄되면
: 나는 코드 : Blocks.Please를 사용하고있어 다음 코드를 읽고 out W.
q = "W " 인 경우 $을 출력합니다.
초보자입니다. 왜 그런지 몰라? Q = 'W이'가 인쇄되면
: 나는 코드 : Blocks.Please를 사용하고있어 다음 코드를 읽고 out W.
q = "W " 인 경우 $을 출력합니다.
문자 적 "W"
는 하나의 char
아니라 널 종료 문자열 'W'
및 '\0'
구성.
한 가지 방법은 const char*
에 할당하고 댓글에서 지적 %s
const char* q = "W";
printf("%s", q);
와 그를 인쇄하여 원하는 동작을 얻기 위해, 당신은 당신의 컴파일러의 경고 수준을 증가시켜 이러한 유형의 오류를 잡을 수 있습니다.
char q = "W";
경고 수준을 설정하면 컴파일러에서 이에 대해 불평해야합니다. 'W'
은 문자가 아니며 문자열 리터럴입니다. 형식은 char [2] ('W'와 '\ 0'의 두 문자 배열)입니다.이 문자는 첫 번째 문자의 포인터로 쇠퇴하고 변환됩니다 char
으로, 단지 '$'의 ASCII 값으로 변환됩니다.
문자열 리터럴을 인쇄하려면 올바른 형식 지정자는 %s
입니다.
진술서
char q = "W";
char
행 어드레스의 값을 "W"
리터럴 스트링의 어드레스를 취하고, 캐스트, 즉, 어드레스의 최하위 바이트 c
할당된다.
귀하의 경우, "W"
의 주소는 예 : 0x12345624
이고, 0x24
, 즉 '$'
으로 변환됩니다.
좋은 대답은 여기에서 일어나는 일입니다. – pradipta
오류가 발생합니다. GCC 4.7.2는'error : C++의 경우 'const char *'에서 'char'[-fpermissive]'로의 잘못된 변환을 제공하고 'error : 초기화는 C에 대해'캐스트없이 포인터에서 정수를 만듭니다. ' – chris
'W '는 문자입니다. , "W"는 2 문자 배열 ('W'와 '\ 0')에 대한 포인터입니다. – aland
C 또는 C++로 결정, C++에서는 문자열을, C에서는 C 문자열을 찾습니다 (char 배열, 문자열의 마지막 문자 0 Byte (Ascii의 경우 0x30 인 문자와 다른 점) 다음은 문제를 해결하는 데 도움이 될 수 있습니다. 그렇지 않으면 문제는 정확히 @aland가 설명한 것입니다 – ted