2011-05-13 4 views
0

저는 C로 작성된 프로그램에서 hypehen 성을 비교하는 작업을하고 있습니다. 예를 들어 Mary Jay-Blige와 Mary Kay-Blige를 비교할 수 있습니다. 하이픈을 찾아 그것의 위치에 변수를 설정하는 코드이다 : APT_String는 IBM의 데이터 스테이지에 대한 데이터 유형strchr(), APT_String 및 빼기 연산

APT_String LAST_NAME 
char * p_ich; 
int iPosHyphen; 
p_ich = strchr(LAST_NAME,'-'); 
iPosHyphen = p_ich-LAST_NAME+1; 

.

나는 위의 코드를 상속 받았으며 "작동"하는 것으로 나타 났지만 p_ich-LAST_NAME+1 작업에 대한 설명이 필요합니다. 즉, strchr()이 첫 번째 '-'의 위치를 ​​반환하면 C가이 산술을 어떻게 처리합니까?

cout<<p_ich;으로 전화하면 -Blige이됩니다. 그래서 일단 지정된 char 발견되면 문자열의 나머지를 반환합니다 같아요?

답변

1

예, strchr은 인덱스가 아닌 첫 번째 발생 주소를 반환합니다. 그래서 하이픈의 위치를 ​​얻기 위해 원래의 문자열 (주소)를 뺍니다. 그러나 +1은 하이픈 다음에 첫 번째 위치 (색인)를 가져옵니다.

p_ich [iPosHyphen] == 'B'.

1

이것은 매우 기본적인 C 포인터 연산이며 쉽게 많은 정보를 찾을 수 있습니다.

다른 포인터에서 하나의 포인터를 빼면 인덱스 사이의 거리가 같은 배열의 일부인 것처럼 계산됩니다. 귀하의 예에서는 * p_ich *와 * LAST_NAME * 사이의 거리가됩니다. 표준 문자 유형 거리 메모리 주소 사이 그러나 일반적으로 차이와 동일 할 것이다 :

ptr1-ptr2 == ((unsigned long)ptr - (unsigned long)ptr2)/sizeof(*ptr) 
+0

작업이 PTR-APT_String이라는 사실은 PTR (-PTR되지 않음)가 불분명 실제로 무슨 일이 일어나고 있는지 있습니다. – user898763452