使用 char* 存储整数

Using char* to store integers

本文关键字:整数 存储 char 使用      更新时间:2023-10-16

我正在尝试将整数转换为存储在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 的输出。为什么我得到的是垃圾而不是"12345"?

问:为什么我得到垃圾而不是"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)逻辑是什么:

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

为了将数字转换为字符串,您需要通过添加字符 '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();
}