2012-08-08 5 views
0

값/C++ 제가 탄화 C에서 C 코드의 일부를 사용하고

char c1[]={0x01}; 
    char c2[]={0x02}; 
    char* c [] = {c1,c2}; 

I [0], C [1] ... 나는 두 값을보고하고 (C)의 값을 확인

디버그 모드에서 다음과 같이

c[0] = \x01\x01 & (x) = *[0] = \x01 
c[1] = \x02\x01\x01 & (x) = *[1] = \x02 

내가 계산하고 경우이

int cclen2 = strlen(c[0]); 

점점 cclen2 = 2와 같은 길이; 하지만 난 널 터미네이터가없는 1

답변

3

c1c2로 값을 얻을해야하고, strlen() (예 : printf("%s", c1) 같은 많은 다른 C의 문자열 처리 기능과 함께) 널 (NULL) 종료가 필요합니다. null 종결자는 문자 리터럴을 사용하여 char[]을 초기화 할 때만 암시 적으로 추가됩니다. 중 하나에

변경 :

char c1[] = { 0x01, 0x00 }; 
char c2[] = { 0x02, 0x00 }; 

또는 :

char c1[] = "\x01"; 
char c2[] = "\x02"; 
1

배열 상수 포인터의 특별한 유형을 만듭니다. char로 선언하면 마침내 null 문자가 추가됩니다. 실제로 당신의 c [0] 문장은 * (c + 0)로 대체됩니다; 주소를 얻으 라. c.

strlen (c [0])은 strlen (c)로 대체됩니다. 그리고 널 문자까지 전체 길이의 문자열을 가져 왔습니다.

나는 이것이 충분한 설명이라고 생각한다.