自自然卷 2016-08-29 16:11 采纳率: 35.7%
浏览 1200

返回值是指针时子函数的内存释放问题,子函数里增加了printf造成main函数输出结果不同的原因?

reverseString中printf那句不注释,main函数里能够打印出“olleh”,而注释那句后main函数打印出的就是乱码。
reverseString中printf那句不注释为什么主函数里能够打印出“olleh”?
reverseString中注释与不注释printf那句会对s2的内存释产生影响?
还是代码写的有问题?我是在codeblocks上运行的,比较困惑,谢谢!

#include <stdio.h>
#include <stdlib.h>

char* reverseString(char* s) {
    char *p1 = s;
    char s2[100];
    int i = 0;
    char *p2 = s2;
    while(*p1!='\0'){
        ++p1;
        ++i;
    }
    --p1;
    while(i>0){
        (*p2++) = (*p1--);
        --i;
    }
    *p2 = '\0';
    //printf("%s\n",s2);//如果注释这句,主函数会打印乱码;如果不注释则能够打印出"olleh"
    return s2;
}

int main(){
    printf("%s",reverseString("hello"));
    return 0;
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2016-08-29 16:20
    关注

    你的程序根本错误在于,你反悔了s2,而s2是堆栈上定义的局部变量,函数返回,堆栈销毁,所以结果不可预料。就算“正确”也不过是侥幸巧合。
    你需要动态分配:
    char *s2 = new char[100];

    评论

报告相同问题?

悬赏问题

  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历