【发布时间】:2016-02-28 11:44:38
【问题描述】:
此代码的目的是将整数转换为字符数组。
以下代码导致垃圾输出。不过,这似乎是对的。有什么建议吗?
#include<stdio.h>
#include<stdlib.h>
char* intToChar(int product);
int main()
{
printf("%s\n", intToChar(213));
return 0;
}
char* intToChar(int product)
{
int temp = product;
int c = 0;
char* morphed;
while(temp)
{
temp /= 10;
c++;
}
/printf("c : %d\n", c);//db
morphed = malloc(sizeof(char) * c);
temp = product;
// printf("temp : %d\n", temp);//db
c -= 1;
while(temp)
{
morphed[c] = (char)temp % 10;
//printf("c[] %c\n", morphed[c]);//db
c -= 1;
temp /= 10;
}
return morphed;
}
【问题讨论】:
-
您需要将
'0'添加到输出中的每个数字以获取数字'0'而不是值为0的字符。 -
您有内存泄漏。和 undefined behavior 因为你不终止“字符串”。您是否有理由必须制作自己的函数,而不是仅使用
printf函数之一(如直接使用printf或snprinf如果您需要字符串)? -
您需要在字符串末尾添加空终止字符
'\0'才能使用printf()。不要忘记为它分配空间!morphed = malloc(sizeof(char) * (c+1));morphed[c]='\0'; -
添加 '0' 成功了!谢谢!
-
输出仍然不正确。 int temp = 3 并不意味着 (char)temp 等于 '3'。