qq_27168967
时月oe
采纳率19%
2019-11-03 10:09

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

已采纳

小白先上代码

#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条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 2年前
    这个随机的,可能正好 p[strlen(str)] 是 '\0'
    对于c语言这种简陋而且原始的语言(缺乏语法和运行时检查)来说,记住一条:程序没写对,未必就报错,程序报错一定是不对。
    
    点赞 1 评论 复制链接分享