u012669830 2017-02-15 06:36 采纳率: 50%
浏览 988
已采纳

输出的字符串是随机的,但是地址的值是也是对了的。vs2013

将整数转换成字符串
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;

}

  • 写回答

2条回答

  • 小灸舞 2017-02-15 07:51
    关注

    因为你返回了一个局部变量的地址。你让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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器