我正在尝试将整数转换为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;?
答案 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();
}