自自然卷 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];

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序