此代码需要获取一个int数并将其转换为显示该数字的char数组: 例如:
号码324
转换为: 喜欢:
char newstr [6] = {'3','2','4','\0','\0','\0'};
我的代码出了什么问题?
如何将此更改为获取int数的函数并返回呈现它的char数组?
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
void main ()
{
int value = 324;
char str [6];
char newstr [6];
int pointer, i = 0;
for(i=0; value>0; i++)
{
str[i] = value%10 + '0';
value /=10;
}
str[i] = '\0';
for(i=5; i>-1; i--)
{
if(str[i]!='\0')
{
newstr[pointer] = str[i];
pointer++;
}
}
for (i = 0; i < 6; i++)
{
printf("%d %c\n", i, newstr[i] );
}
printf ("shalom");
}
答案 0 :(得分:2)
一种简单的方法应该是调用sprintf()
。
char newstr[6] = {0};
sprintf(newstr, "%d", value);
在现有代码中,str
看起来很{'4', '2', '3', '\0', SomethingRandom, SomethingRandom}
。撤消并分配给newstr
会使其{SomethingRandom, SomethingRandom, '\0', '3', '2', '4'}
,这绝对不是您想要的。事实上,在newstr
时,您不会指定str[i] == '\0'
,这意味着newstr[2] == SomethingRandom
。
答案 1 :(得分:1)
尝试以下
#include <stdio.h>
#include <stdlib.h>
char * itoa( int x )
{
const unsigned int BASE = 10;
unsigned int u = abs( x );
size_t n = 0;
unsigned int tmp = u;
char *s;
do { ++n; } while ( tmp /= BASE );
n += x < 0;
s = malloc( ( n + 1 ) * sizeof( char ) );
s[n] = '\0';
do
{
s[--n] = u % BASE + '0';
} while ( u /= BASE );
if ( x < 0 ) s[--n] = '-';
return s;
}
int main(void)
{
char *s = itoa( -1234567890 );
printf( "%s\n", s );
free( s );
return 0;
}
输出
-1234567890
至于你的问题你的代码有什么问题,那就完全错了。:) 例如,代码忽略等于零的数字。变量指针未初始化
int pointer, i = 0;
每个循环处理一些垃圾等等。
如果您要调查我的代码,对您会更有帮助。
答案 2 :(得分:1)
OP的代码看起来非常接近正确用于限制使用。
请勿从value>0
测试开始,否则在value == 0
时,结果将为""
。请务必将迭代次数限制为不超过数组大小。
do {
str[i] = value%10 + '0';
value /=10;
i++;
} while (value>0 && i < (6-1));
在循环中设置'\0'
。 @timra指出随机未设置元素。
do {
str[i] = '\0';
i++;
} while (i < (6-1));
OP仍有2个问题,OP尚未指定该做什么:
顺便说一句:“我认为'\ 0'是空的,对吧?”值大于99999
值&lt; 0
'\0'
是“空字符”。这与NULL
不同,即“空指针”。
“如何将其更改为获取int数的函数并返回呈现它的char数组”
OP的代码存在许多角落问题。建议一种新的方法
执行转换为本地数组,然后返回它的副本
调用代码最终应free()
。
#include <limits.h>
// max size needed for int. Note 10/33 just greater than log(2)
#define INTSIZE_MAX (sizeof int * CHAR_BIT * 10 / 33 + 3)
char *intoa_alloc(int x) {
char buf[INTSIZE_MAX];
char *p = &buf[sizeof buf - 1];
// Work with negative absolute value to cope with INT_MIN
// This avoids portability problems with abs(x) approach.
int x_negative = x < 0 ? x : -x;
// Form string
*p = '\0';
do {
*--p = '0' - x_negative % 10;
x_negative /= 10;
} while (x_negative);
if (x < 0) {
*--p = '-';
}
char *dest = malloc(strlen(p) + 1);
if (dest) {
strcpy(dest, p);
}
return dest;
}
答案 3 :(得分:0)
用这种简单的方法就可以做到。
int main()
{
char str [6] = "324";
printf ("%c",str[1]);
return 0;
}