C 또는 C ++에서 작은 따옴표와 큰 따옴표


답변:


282

C 및 C ++에서 작은 따옴표는 단일 문자를 식별하고 큰 따옴표는 문자열 리터럴을 작성합니다. 'a'은 단일 문자 리터럴 인 반면 "a", 'a'및 종료 자 (2 개의 문자 배열)를 포함하는 문자열 리터럴 입니다.

문자 그대로의 형태 인 ++ C에서 char,하지만 C에서, 문자 그대로의 형태가 참고 int이라고 sizeof 'a'동안의 int는 32 비트이다 (그리고 CHAR_BIT 8이다) 아키텍처에서 4 sizeof(char)사방 1이다.


47

일부 컴파일러는 다중 문자 상수를 허용하는 확장도 구현합니다. C99 표준은 다음과 같이 말합니다.

6.4.4.4p10 : "하나 이상의 문자 (예 : 'ab')를 포함하거나 1 바이트 실행 문자에 매핑되지 않는 문자 또는 이스케이프 시퀀스를 포함하는 정수 문자 상수의 값은 구현 정의됩니다. "

예를 들면 다음과 같습니다.

const uint32_t png_ihdr = 'IHDR';

결과 상수 (이를 구현하는 GCC에서)는 각 문자를 가져 와서 이동하여 얻는 값을 가지므로 'I'는 32 비트 값의 최상위 비트로 끝납니다. 플랫폼 독립적 인 코드를 작성하는 경우에는 이것에 의존해서는 안됩니다.


7
고마워, 나는 이것을 일부 코드에서 보았고 응답은 "WTF"로만 설명 할 수 있습니다. 저는 GCC를 15 년 동안 사용하고 사용하고 있으며 지금까지 한 번도이 문제에 부딪치지 않았습니다.
eeeeaaii

매직 헤더 외에 +1, 종종 명령 행 평가에 사용됩니다.
Wolf

28

작은 따옴표는 문자 ( char)이고 큰 따옴표는 null로 끝나는 문자열 ( char *)입니다.

char c = 'x';
char *s = "Hello World";

8
"hello world"는입니다 const char *.
OldSchool

@Eiko 언제 위와 같이 변수 앞에 * s를 넣습니까?
CodeGuru

@CodeGuru 변수가 포인터 유형 인 경우 *를 사용합니다. 이 경우 's'는 문자 배열을 가리 킵니다.
Eiko

16
  • 'x' 기계 문자 세트에서 문자 x의 숫자 값을 나타내는 정수입니다.
  • "x"문자의 배열로 이루어진 두 개의 긴 문자 ‘x’뒤에‘\0’

2
늦게;) 당신의 대답에서 실제로 새로운 점은 무엇입니까?
Wolf

10

작은 따옴표는 단일 문자를위한 것입니다. 큰 따옴표는 문자열 (문자 배열)입니다. 원하는 경우 작은 따옴표를 사용하여 한 번에 한 문자 씩 문자열을 작성할 수 있습니다.

char myChar     = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };

10

나는 다음과 같은 것들을 파고 들었다 : int cc = 'cc'; 기본적으로 정수에 대한 바이트 단위 복사입니다. 따라서 그것을 보는 방법은 기본적으로 2 c 인 'cc'가 정수 cc의 2 바이트 아래로 복사되는 것입니다. 사소한 것을 찾고 있다면

printf("%d %d", 'c', 'cc'); would give:

99 25443

25443 = 99 + 256 * 99 때문입니다

따라서 'cc'는 문자열이 아닌 다중 문자 상수 입니다.

건배


8
  1. single quote입니다 character;
  2. double quote입니다 string.

6

큰 따옴표는 문자열 리터럴을위한 것입니다. 예 :

char str[] = "Hello world";

작은 따옴표는 단일 문자 리터럴을위한 것입니다. 예 :

char c = 'x';

편집 David가 다른 답변에서 언급했듯이 문자 리터럴의 유형은입니다 int.


감사 . 문자가 끝에 1 바이트의 널 문자가없고 '/ 0'이없는 1 바이트를 의미합니다. 문자열의 끝에 널 문자가 있습니다.
Vishwanath Dalvi

2
@mr_eclair : 문자열 리터럴 에는 항상 암시 적 null 종결자가 포함되어 있지만주의해야합니다. 당신은 뭔가를 쓸 수 char str[] = {'H','e','l','l','o'};, 그리고 str아니 널 터미네이터 있습니다.
Oliver Charlesworth

이 상황에서는 str문자열이 아닙니다 (NTBS로 정의 된 C 스타일 문자열이 아님).
Steve Jessop

@Steve : 이해했습니다. @mr_eclair에 대한 나의 요점은 char[](사람들이 종종 "문자열"이라고하는) 모든 것이 null로 끝나는 것이 아니라는 것입니다.
Oliver Charlesworth

1
@OliCharlesworth 이것은 다행스럽게도 진실이 아닙니다 . 주석으로 구분 된 두 개의 문자열 리터럴 "hello" /*seamlessly connected to*/ "world"입니다. 그리고 이것은 주석 처리 된 여러 줄 메시지에 적합합니다.
Wolf

6

C에서 'a'와 같은 작은 따옴표는 문자 상수를 나타내며 "a"는 문자 배열이며 항상 0 문자로 끝납니다.


4

작은 따옴표는 문자에 사용되고 큰 따옴표는 문자열에 사용됩니다.

예를 들어 ..

 printf("%c \n",'a');
 printf("%s","Hello World");

산출

안녕하세요 세계

반대로 그 반대로 사용하고 문자열에 작은 따옴표를 사용하고 문자에 큰 따옴표를 사용한 경우. 결과는 다음과 같습니다.

  printf("%c \n","a");
  printf("%s",'Hello World');

출력 :

가비지 값이 있거나 예상치 못한 결과가 발생하거나 다음과 같이 출력 될 수 있습니다.

두 번째 진술 동안. 당신은 아무것도 볼 수 없습니다. 한가지 더. 이 후에 더 많은 진술이 있다면. 그들은 또한 당신에게 결과를주지 않을 것입니다.

참고 : PHP 언어는 작은 따옴표와 큰 따옴표를 쉽게 사용할 수있는 유연성을 제공합니다.


3

작은 따옴표는 문자를 나타내며 이중은 문자열을 나타냅니다.

Java에서도 마찬가지입니다.


2
이 정보가 이미 다른 답변에 포함되어 있기 때문에 질문에 가치를 더하지는 않습니다.
Mike Precup

2

다음과 같이 작은 따옴표를 작은 따옴표로 사용하십시오.

char ch = 'a';

여기 'a'에 char 상수가 있으며 char a의 ASCII값 과 같습니다 .

다음과 같이 문자열에 큰 따옴표를 사용하십시오.

char str[] = "foo";

여기 "foo"에 문자열 리터럴이 있습니다.

사용하는 "a"것은 좋지만 '사용하는 것은 좋지 않습니다.'foo'

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.