时月oe 2019-11-03 10:09 采纳率: 50%
浏览 240
已采纳

关于字符数组剩余空间分配的问题

小白先上代码

#include<iostream>
using namespace std;
//设计函数返回字符串的前n个字符
char* re(const char* str,int n = 1);
int main()
{
    const char* p = "hello world";
    cout << re(p,100) << endl;

    return 0;
}
char* re(const char* str,int n)
{
    if(n < 0)
        n = 0;//防止用户输入负数
    char* p = new char [n + 1];
    for(int i = 0;i < n && str[i];i++)
        p[i] = str[i];
    p[n] = '\0';//这里我把最后一个元素的值设置为0
    return p;
}

在上面的re函数中,我把新建的数组p的最后一个元素设置为0,可是当str数组很短,并且我传入的n很大的时候,p数组中就会有剩余空间,他们的数值是未知的,但是为什么程序可以正常运行,不会出错呢?(比如面的程序正常输出hello world)

  • 写回答

1条回答 默认 最新

  • threenewbee 2019-11-03 10:43
    关注
    这个随机的,可能正好 p[strlen(str)] 是 '\0'
    对于c语言这种简陋而且原始的语言(缺乏语法和运行时检查)来说,记住一条:程序没写对,未必就报错,程序报错一定是不对。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示