2017-01-08 1 views
4

문자 배열에 문자 '\0'을 저장 한 다음 다른 문자를 저장할 수 있습니까? 예를문자 배열에 ' 0'을 저장하는 방법

char* tmp = "My\0name\0is\0\0"; 

를 들어 실제로 C에서 문자열 목록을 호출하는 배웠습니다,하지만 난 인쇄하려고 할 때 위 (printf("%s\n", tmp)를 사용하여), 그것은 단지

인쇄 "내".

+2

의 값을 더 볼 수 있습니다 첫 번째 \ 0

을 볼 때 중지됩니다 너는 단지 '마이'만 저장했다는 걸 알지? 그것은 아마도 전체 시퀀스를 저장했을 지 모르지만 null 문자'\ 0'를 "보고"난 후 인쇄 기능이 멈 춥니 다. –

+0

True, edited. 그러면 어떻게 인쇄 할 수 있습니까? –

+0

당신은'tmp'를 인쇄 할 때 사용했던 코드를 게시합니다. 문제는 그 코드와 문자 배열에 \ 0을 저장할 수있는 능력이 아닙니다. – Soren

답변

5

예, 그것은 확실히 가능하다, 그러나 또한, 당신은 문자열로 해당 배열을 사용하고 '\0' 후 저장된 내용을 얻을 수 없습니다. 정의에

문자열는 널 문자에 의해 종결 '\0'char 배열 이다. 모든 문자열 관련 함수는 종결 null 바이트에서 끝납니다 (예 : '\0'이 포함 된 인수, 형식 지정자 %sprintf()에 전달 된 실제 내용 사이에 있음).

용어

C11 챕터 §7.1.1, 정의를 인용하는 문자열 제 널 문자를 포함하는 인접하여 종결 자 서열의 이고. [...]

그러나 바이트 단위 처리의 경우 할당 된 메모리 영역에 머물러있는 한 좋습니다.

+0

So –

+0

@UFCInsider 배열을 반복하고, 모든 요소를 ​​가져 와서 '% c'를 사용하여 인쇄 할 수 있습니다. 배열 제한 내에 머물러 있어야합니다. –

+0

그래, 이제 알겠습니다. –

1

당신이 가지고있는 문제는 tmp을 인쇄하는 데 사용하는 기능입니다. printf와 같은 함수는 문자열이 널 (null) 종료된다고 가정 할 것이다, 그래서 다음과 같은 코드를하려고하면 당신이 어떻게 tmp

int main(int c,char** a){ 
    char* tmp = "My\0name\0is\0\0"; 
    write(1,tmp,12); 
} 
+0

내 질문을 편집했습니다. 어떻게 인쇄합니까? –

+0

@UFC 인더 더 - 정말 새로운 질문이며 더 이상 '어떻게해야합니까?' ore '문자 배열에 \ 0'- 새로운 질문을 만듭니다. – Soren

+0

Ok, 감사합니다. –

관련 문제