문자열에서 문자의 첫 번째 항목 색인을 int로 가져오고 해당 위치를 가리키는 포인터를 가져 오지 못하게하려면 어떻게합니까? 당신이 C에서 배열이 포인터가있는 경우strchr에서 포인터 대신 int 가져 오기
답변
, 당신은 간단하게 수행 할 수 있습니다 base_address
배열 자체
index = later_pointer - base_address;
.
#include <stdio.h>
int main (void) {
int xyzzy[] = {3,1,4,1,5,9}; // Dummy array for testing.
int *addrOf4 = &(xyzzy[2]); // Emulate strchr-type operation.
int index = addrOf4 - xyzzy; // Figure out and print index.
printf ("Index is %d\n", index); // Or use ptrdiff_t (see footnote a).
return 0;
}
출력 : 예를 들어
Index is 2
당신이 볼 수 있듯이, 그것은이 char
하지만 대한 중요하지 않는 것이 기본 유형 (관계없이 당신에게 인덱스를주고 제대로 확장 일반적인 경우에 알면 유용합니다.) 당신의 문자열이 mystring
하고있는 경우
그래서, 특정 경우에, strchr
의 반환 값은 단지 인덱스 얻을 chpos - mystring
를 사용 chpos
입니다 (이 물론 문자 발견을 가정을, 즉, chpos != NULL
).
는 (a) 같이 바르게 댓글에서 지적 포인터 공제의 종류 int
에 다른 범위를 가질 수 ptrdiff_t
이다. 당신의 배열의 차이가 int
에 맞지 않을 정도로 큰있을 경우에만 문제가 될 것
ptrdiff_t index = addrOf4 - xyzzy; // Figure out and print index.
printf ("Index is %td\n", index);
참고 : 완벽하게 정확하려면 인덱스의 계산 및 인쇄가 더 잘 할 수있다. 두 가지 유형의 범위가 직접 관련이 없으므로 가능합니다. 휴대형 코드를 중요하게 생각한다면 ptrdiff_t
변형을 사용해야합니다.
를 사용하여 포인터 연산 :
char * pos = strchr(str, c);
int npos = (pos == NULL) ? -1 : (pos - str);
당신이 표준을 처리하는 경우 : 문자열이 아닌 일반 C-문자열 당신은
http://www.cplusplus.com/reference/string/string/find_first_of/
이 질문은 C++가 아니라 C에 관한 것입니다. –
그는 원래 C++로 태그를 지정했으며 "IF"라고 말했습니다. P –
- 1. boost :: ptr_vector에서 참조 대신 포인터 가져 오기
- 2. textField에서 int 가져 오기
- 3. 포인터 위치 가져 오기
- 4. 오브젝트에서 int 값 가져 오기
- 5. 'int'문자열에서 int 유형 가져 오기
- 6. DLL 가져 오기 malloc 이중 간접 포인터
- 7. CLIPS : 사실 가져 오기 및 포인터 가져 오기
- 8. 백분율 대신 'px'크기 가져 오기
- 9. 포인터 + int 대 포인트 -
- 10. INT 포인터 C에서
- 11. 문자열 대신 :: string_type int 대신
- 12. 단일 포인터 대신 이중 포인터 사용
- 13. HW Help : 줄 가져 오기 대신 char 가져 오기
- 14. 모듈 수준의 가져 오기 대신 테스트 당 모듈을 가져 오기?
- 15. 자바의 콤보 상자에서 int 값 가져 오기
- 16. BitmapFactory.decodeResource (context, int) 컨텍스트 문자열 가져 오기
- 17. C에서 색인에서 int 배열 값 가져 오기 #
- 18. 앱 아이콘을 int 식별자로 가져 오기
- 19. 어셈블러 함수에서 숯 포인터 가져 오기
- 20. 마우스 포인터 아래 단어 가져 오기
- 21. PHP 파일 가져 오기 이미지를로드하는 포인터
- 22. C++에서 벡터에서 포인터 벡터 가져 오기
- 23. 마우스 포인터 아래에 텍스트 가져 오기
- 24. 파일 조작 | 포인터 가져 오기 및 놓기
- 25. JNI를 통해 Java ByteBuffer 포인터 가져 오기
- 26. Objective-C에서 포인터 변수의 주소 가져 오기
- 27. QPlainTextEdit에서 QTextBlock에 대한 포인터 가져 오기
- 28. 파일 설명자에서 파일 포인터 가져 오기
- 29. GTK : 스크롤 이벤트에서 포인터 위치 가져 오기
- 30. 마우스 포인터 아래에 텍스트 가져 오기
find_first_of : 문자열을 :: 표준을 사용할 수 있습니다 아마도 1 바이트보다 큰 유형의 배열에 대해 sizeof (type)로 나누는 것에 대해 언급해야할까요? –
@Mike, C가 자동적으로 포인터 산술을 스케일링하기 때문에 실제로 같은 타입이 필요한 것은 아닙니다. 나는 그 대답에 덧붙였다. – paxdiablo
감사합니다. – hesson