2015-02-02 4 views
0

정수를 char *s에 저장된 숫자 문자열로 변환하려고합니다.char *를 사용하여 정수 저장

char* ItoA(int n, char *s){ 
    int mod = n; 
    for(int x = 1; x <= sizeof(n) + 2; x++){ 
     int digit = mod % 10; 
     s[x-1] = digit; 
     mod = mod/10; 
    } 
    return s; 
} 

void main(){ 
    int n = 12345; 
    char s3; 
    // should print 12345 
    cout << "\n" << ItoA(n, &s3); 
    cin.get(); 
} 

메인의 출력으로 가비지 배열을 계속 가져 가기 때문에 내 표기법에 문제가 있음을 알고 있습니다. 왜 "12345"대신에 쓰레기가 나옵니까?

+1

['itoa()'(HTTP있다. cplusplus.com/reference/cstdlib/itoa) 표준 C++ 호환되지 않습니다. –

+0

이상한. 나는 모든 C 라이브러리가 C++에 포함되었다고 가정했다. 표준 C++이 아닌 이유는 무엇입니까? C99이 아마도 C++에 복사되지 않았을까요? *** 다시 업데이트 : *** itoa는 표준이 아닌 것 같습니다. C : http://stackoverflow.com/questions/10162733/atoi-is-a-standard-function-but-itoa-is-not -why –

+1

'snprintf'를 사용할 수 있습니다. –

답변

0

숫자를 문자열로 변환하려면 '0' 문자를 추가하여 ASCII로 변환해야합니다. 또한 모든 문자를 저장하고 메모리를 초기화 할만큼 충분한 메모리를 할당해야합니다. 마지막으로 for 루프의 논리가 깨지며 일반적으로 문자열을 역방향으로 구성한 다음 역순으로 쉽게 만듭니다.

#include <iostream> 
#include <string.h> 

using namespace std; 

char* ItoA(int n, char *s, int bufLength){ 
    // Create the string in reverse order 
    int i; 
    for(i = 0; i < bufLength; i++){ 
     int digit = n % 10; 
     s[i] = digit + '0'; 
     n /= 10; 
     if (n == 0) break; 
    } 

    // Reverse the string. 
    for (int j = 0; j <= i/2; j++) { 
     char c = s[j]; 
     s[j] = s[i - j]; 
     s[i - j] = c; 
    } 

    return s; 
} 

int main(){ 
    int n = 12345; 
    char s3[6]; 
    memset(s3, 0, 6); 
    // should print 12345 
    cout << "\n" << ItoA(n, s3, 6); 
    cin.get(); 
} 
+1

'sizeof (n) + 2 '의 의미는 무엇입니까? –

+0

@IgorTandetnik, 수정 됨. – merlin2011

1

Q : 왜 "12345"대신 가비지를 가져 오나요?

마치 문자 배열 인 것처럼 &s3을 사용하고 있습니다.

사용 :

int main(){ 
    int n = 12345; 
    char s3[20]; // Use an array of characters large enough to hold the number. 
    // should print 12345 
    cout << "\n" << ItoA(n, s3); 
    cin.get(); 
} 

또한, 논리 아래 sizeof(n)를 사용하기위한 무엇인지 나에게 분명하지 않다 : // WWW :

for(int x = 1; x <= sizeof(n) + 2; x++) 
+0

... 또한's [x-1] = digit;은's [x-1] = digit + '0 ''이어야합니다. 이 질문에 관한 많은 질문과 문제 –

관련 문제