将整数转换成字符串
char* int2str( int i)
{
int temp = i;
int k = 0;
char buf[10];
char *str = buf;
while (temp != 0)
{
buf[k] = (temp % 10)+'0';// 字符0的asii码是49
temp = temp / 10;
k++;
}
buf[k] = 0;
return str;
}
int main(void)
{
char *pstr;
pstr=int2str(21);//调试发现这一步执行完后pstr指向的字符串已经是“12”
printf("str=%s\n", pstr);//我没有倒置,所以理论上输出出来的因该是12,但是打印出来的字符串是随机的
return 0;
}
因为你返回了一个局部变量的地址。你让str指向buf,而buf的声明周期在你调用完int2str就结束了
返回一个局部变量的地址是未定义行为,所以不同的编译器可能得到不同的结果
改成用malloc才行:
#include<stdio.h>
#include<stdlib.h>
char* int2str(int i)
{
int temp = i;
int k = 0;
char *buf = (char *)malloc(sizeof(char) * 10);
char *str = buf;
while (temp != 0)
{
buf[k] = (temp % 10) + '0';// 字符0的asii码是49
temp = temp / 10;
k++;
}
buf[k] = 0;
return str;
}
int main(void)
{
char *pstr;
pstr = int2str(21);//调试发现这一步执行完后pstr指向的字符串已经是“12”
printf("str=%s\n", pstr);//我没有倒置,所以理论上输出出来的因该是12,但是打印出来的字符串是随机的
return 0;
}