빈 문자를 어떻게 표현합니까?


84

현재 작은 프로그램을 작성하고 있지만 컴파일 할 때이 오류가 계속 발생합니다.

오류 : 빈 문자 상수

유효한 문자를 빈 공간으로 바꾸려고 c[i]=''했지만 다른 방법으로 표현할 수 없었기 때문이라는 것을 알고 있습니다.


빈 문자열이있을 수 있지만 "빈 공간"(잘못된 용어)은 없습니다. 당신이 바꾸시겠습니까 c[i]빈 공간 , 또는 백 스페이스를 누를 때 당신은 당신이 편집기에서하는 것처럼 배열에서 해당 문자를 "제거"하시겠습니까 (즉, 당신이 문자의 C [I-1]와 C를 [싶어 i + 1] 수술 후 인접 해 지나요?
Lorenzo Donati-Codidact.com 2013-08-23

1
문자열을 이해하면 선언시 char c[5] = "";빈 문자열 을 할당 할 수 있지만 char c = '';아래 6 답변에서 설명한대로 유효하지 않습니다.
Grijesh Chauhan 2013-08-23

답변:


132

당신은 사용할 수 있습니다 c[i]= '\0'하거나 c[i] = (char) 0.

널 / 빈 문자는 단순히 0의 값이지만 이스케이프 된 0이있는 문자로 표시 될 수도 있습니다.


11
예, "빈 문자"가 없습니다. '\0'와 관련이 없는 null char 입니다 NULL. 널 문자는 숫자 코드로 0을 갖는 문자입니다.
Lorenzo Donati-Codidact.com 2013 년

@LorenzoDonati 나는 그것을 널 문자라고 불렀고, 빈 문자는 OP의 용어를 사용하는 것입니다. 나는 또한 내 편집에서 그것을 명확히했습니다. chux가 지적했듯이 NULL은 포인터가 아닌 참조 거래에 적합하지 않으므로 해당 메모도 작성했습니다.
열렬한 '

1
@LorenzoDonati 예,이 답변에 아무것도 추가하지 않고 당면한 토론의 맥락에서 벗어난 것처럼 보이기 때문에 제거하기로 결정했습니다.
열렬한 '

@LorenzoDonati 싱글 null char이어야 하지 않습니다 . nul charl
Grijesh Chauhan 2013-08-23

2
빈 문자 같은 것은 없습니다. null char을 빈 문자라고 부르는 것은 단순히 잘못되었습니다.
Christoffer Hammarström 2015 년

28

캐릭터에 "문자 없음"을 저장할 수 없습니다. 말이 안됩니다.

대안으로 당신에게 특별한 의미를 가진 문자 (예 : null char)를 저장 '\0'하고 이것을 특별히 취급 할 수 있습니다.


5
나는 이것이 허용되는 것보다 훨씬 더 나은 대답이라고 생각하는데, 이는 null char과 empty char를 혼동합니다. 당신은 저장해야 - 비유로, 당신이 int로 저장 '번호 없음'을 선언 할 수 없습니다 말처럼 일부 값입니다.
simonwo

4
""문자열은 0 개 이상의 문자 시퀀스이기 때문에 널 문자열을 가질 수 있지만 문자는 0이 아니라 그 이상이 아닌 정확히 하나의 값입니다.
simonwo

11

빈 공간 문자는입니다 ' '. null을 찾고 있다면 '\0'.


10

예, c[i]=''유효한 코드가 아닙니다. ' '예를 들어 c[i] = 'A';char 사이에 문자 상수를 괄호로 묶습니다 A. 하지만 사이에 문자를 쓰지 않습니다 ''.

빈 공간은 아무것도 아닙니다. 공간을 할당하려면 다음을 수행하십시오.

할당하려면 nul char다음을 수행하십시오.

예 : c[]문자열 이 있는 경우 문자열 (nul로 \0끝나는 char 배열)이 있다고 가정 합니다. 예를 들면 :

그리고 두 번째 문자를 공백으로 바꿉니다 .

다음과 같이 printf를 사용하여 인쇄하는 경우 :

출력은 다음과 같습니다.

그리고 두 번째 문자를 '\ 0'으로 바꿉니다 .

출력은 다음과 같습니다.

문자열이 \0.


'\ 0'뒤에 문자가 있으면 어떨까요? 예를 들어 "sample"remove m과 같은 문자열에서 문자를 제거한다고 가정합니다. 그 뒤에 문자를 왼쪽으로 이동하여 제거하는 대신 가상의 빈 문자로 대체하는 방법이 있습니까?
Himanshu Poddar

5

"빈 문자"와 같은 것은 없습니다 ''.

공백 문자가 필요한 경우 공백 : c[i] = ' '또는 해당 ASCII 8 진수 :으로 표시 할 수 있습니다 c[i] = '\040'. NUL 문자가 필요한 경우 c[i] = '\0'.


4

값이 존재하지 않는다는 사실을 나타 내기 위해 두 가지 선택이 있습니다.

1) 전체 char범위가 의미 있고 값을 예약 할 수없는 경우 다음 char*대신 사용하십시오 char.

그런 다음 c[i] == NULL문자가 없을 때를 사용하고 그렇지 않으면 *c[i]일반 문자를 사용합니다.

2)에서 표현할 수있는 일부 값이 필요하지 않은 경우 char값이 존재하지 않음을 나타 내기 위해 하나를 예약하십시오 (예 : '\0'문자).

그러면 c[i] == '\0'캐릭터가 없을 때를 위해, 그렇지 않으면 일반 캐릭터를 갖게 됩니다.


3
문제는 태그입니다 C 가 아니라 C ++
Spikatrix

@CoolGuy 좋은 지적, 당신 말이 맞아요. 대답의 요점은 여전히 ​​메모리 할당이 수행되는 방식에서 추상화됩니다.
BartoszKP

4

동일한 명령을 수행하는 두 가지 방법, 즉 빈 문자열이 있습니다. 첫 번째 방법은 정적 메모리에 빈 문자열을 할당하는 것입니다.

또는 명시 적으로 표현하려는 경우 :

위에 게시 된 방법은 캐릭터 전용입니다. 그리고 두 번째 방법 :

strdup () 은 내부에서 malloc을 사용 하기 때문에 free () 를 사용하는 것을 잊지 마십시오 .


2

일부 인덱스를 명시 적으로 null char로 지정하는 것보다 문자열에 null을 할당하는 것이 유용 할 수 있습니다 '\0'. 문자열이 적절한 범위 내에 있는지 확인하는 함수를 테스트하는 데 이것을 사용했습니다.

와:

그러면 값이있는 크기 8의 배열이 생성됩니다.


0

String before = EMPTY_SPACE+TAB+"word"+TAB+EMPTY_SPACE;

EMPTY_SPACE = ""(문자열) TAB = '\ t'(문자)

String after = before.replaceAll(" ", "").replace('\t', '\0');

의미 = "단어"

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