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条)

报告相同问题?

悬赏问题

  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False