2011-08-25 7 views
1

C++에서 배열의 마지막 요소에 액세스하려고합니다 (특히 정수를 문자 배열로 변환 한 다음 마지막 숫자에 액세스하려고합니다). 여기에 지금까지 가지고 올 한 내용은 다음과 같습니다배열의 마지막 요소

int number_to_convert = 1234; 
char * num_string; 
sprintf(num_string, "%d", number_to_convert); 
printf("Number: %d Sizeof num_string: %d Sizeof *num_string: %d Sizeof num_string[0]: %d\n", number_to_convert, sizeof(num_string), sizeof(*num_string), sizeof(num_string[0])); 

내가 마지막 요소에 액세스하기 위해 여러 가지 조합을 시도,이 정보를 사용하여 :

num_string[sizeof(number_to_convert)/sizeof(*number_to_convert)-1]; 
num_string[sizeof(number_to_convert)-sizeof(char)] 

어쩌면 마지막 자리를 얻을 수있는 더 좋은 방법이를, 하지만 이것이 제가 찾을 수있는 최선의 방법입니다. 나는 마지막 문자 (null 문자가 아님)를 원한다.

+0

가하셨습니까 ** num_string [sizeof 연산자 (num_string) -sizeof (문자)] ** ** number_to_convert [sizeof (number_to_convert) -sizeof (char)] 대신 ** – Arun

+0

num_string이 예제에서 메모리가 할당되지 않았으므로 위험합니다. sprintf가 실제로 기록 된 총 문자 수를 줄 때도 계속 반환해야합니다. 또한 sprintf가 아닌 snprintf를 사용하도록 미리 정의되어 있습니다 – Pierre

+0

해당 코드가 컴파일 되나요? int 변수를 참조 해제하려고합니다 (number_to_convert). – guardianpt

답변

9

n의 마지막 십진수는 n % 10입니다.

해당 숫자의 문자 숫자 문자를 얻으려면 '0' + (n % 10)을 사용하십시오.

다른 번호의 경우 10을 해당베이스로 바꿉니다.


"나는 할 수 있기 때문에"식으로 :

std::ostringstream s; 
s << n; 
char last_digit = *s.str().rbegin(); 

심지어 :

const char last_digit = *static_cast<std::ostringstream&>(std::ostringstream() << n).str().rbegin(); 
+0

위대한 감사의 말을 전합니다.하지만 더 복잡한 경우에도 내가 보여준 방식대로하는 방법을 알고 싶습니다. 배열/포인터에 대해 지금 배우고 있고 C 문자열로 숫자를 변환 한 다음 마지막 요소를 가져 오는 것이 좋은 방법 인 것 같았습니다. – syl

+0

Nah, 그다지 C++이 아닙니다. 무엇이든간에 문자열 스트림과 형식화 된 출력을 사용할 수 있습니다. 'sprintf'를 잘못 사용했음을 주목하십시오. 수동 메모리 관리가 잘되어 있지 않다면 치명적인 C 함수를 유지하지 않는 것이 가장 좋습니다. –

관련 문제