使用char *存储整数

时间:2015-02-02 21:41:11

标签: c++ arrays pointers char

我正在尝试将整数转换为char *s中存储的数字字符串。

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();
}

我知道我的符号出了点问题,因为我在main中输出了一堆垃圾作为输出。为什么我会得到垃圾而不是&#34; 12345&#34;?

2 个答案:

答案 0 :(得分:1)

问:为什么我会得到垃圾而不是&#34; 12345&#34;?

您正在使用&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)的逻辑是什么:

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

答案 1 :(得分: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();
}