2012-09-24 2 views
1
char ch[2]; 
ch[0] = 'h'; 
ch[1] = '\0'; 

또는 난 그냥정확한 길이의 문자 배열을 C로 초기화 하시겠습니까?

char ch[1]; 
ch[0] = 'h'; 

을 할 수는있는 '0 \'을 이미 암시 할 것인가?

내가 이런 식으로하는 이유는 내 프로그램이이 문자를 끊임없이 변경하고 더 긴 문자열로 연결하는 루프를 가지고 있기 때문입니다.

+0

, 문자열의 끝을 의미 O'은'\ 그래서 때마다'의 printf ("% s '에, 채널);' 그 기능을 검색합니다. –

답변

5

ch[0] 만 지정하면 ch[1]에 0이 할당되지 않습니다.

char ch[2] = "h"; 

ch[0]'h'을 넣어 것, 그리고 ch[1]에 제로를 종료 : 당신은이 같은 한 줄의 문자열 리터럴과 배열에 문자를 모두 초기화 할 수 있습니다.

1

원하는 경우 널 문자는 생략 할 수 있지만 strlen과 같이 종료 널 문자가 필요한 기능은 사용할 수 없습니다.

0

글쎄,이 단일 문자 문자열을 계속 사용하려는 경우 하나의 옵션은 null을 한 번만 초기화하는 것입니다. 그럼 당신은 오직 첫 번째 문자 변경해야합니다 : 두 번째 경우

char ch[2] = {0}; 
ch[0] = 'h'; 

을, 당신은 배열을 선언 할 필요가 없습니다

char ch = 'h'; 

을하지만 당신은 문자열로 그것을 사용할 수 없습니다 . 단일 문자 '배열'에는 함축 된 null 문자가 없습니다.

문자열 대신 문자열에 문자를 추가 할 수없는 이유는 무엇입니까? 이것이 뭔지 알고 싶다면 strcat이 필요하지 않습니다. 끝나고 null을 추가 할 때까지 계속해서 하나의 문자를 계속 추가 할 수 있습니다.

char somestring[100]; 
char pos = 0; 
while(...) { 
    somestring[pos] = 'x'; /* or whatever */ 
    pos = pos + 1; 
} 
somestring[pos] = 0; 
-1

ch는 문자 배열이 아닌 문자열이다.

'\0'을 추가하는 경우에만 컴파일러에서이를 문자열로 인식 할 수 있습니다. 그러나, 그것을 char 배열로 인식 할 수는 없다.

그래서, 당신은 당신이 이런 식으로 할 수 있으며, '\0' 추가해야합니다

int ind=0; 
while(...) 
{ 
    ch[ind++]='h'; 
} 
ch[ind]='\0'; 
+0

C에는 문자열이 없으며 문자열로 처리 할 수있는 char 배열 만 있습니다. ** 컴파일러 **는 char 배열이 무엇을 포함하고 있는지에 관계없이 문자열로 인식하지 않습니다. 아마도 "구현"또는 "C 라이브러리"를 의미 할 것입니다. 그리고 루프는 OP의 질문에 적용되지 않습니다. 이것은 단일 문자 또는 길이가 1 인 문자열에 관한 것입니다. –

관련 문제