gpt4 book ai didi

c++ - 这段代码有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:11 26 4
gpt4 key购买 nike

int main()
{
char *name = new char[7];
name = "Dolphin";
cout << "Your name is : " << name <<endl;
delete [] name;
}

为什么 VC++ 编译器不报错?

最佳答案

这里有两个问题:

首先,代码有什么问题?嗯……

当您将“Dolphin”分配给 name 时,您并不是在复制到分配的数组中,而是在调整指针以指向字符串文字。稍后您尝试删除指针指向的内容。我预计这会在某些环境中严重崩溃。

如果您真的想要“Dolphin”字符的拷贝,请查看 strncpy(),但正如已经观察到的那样,您也需要一个空值空间。

其次,为什么那个特定的编译器不警告您赋值是潜在的:这有点难。 [观察到其他编译器会发出警告。]问题是这个编译器是将字符串文字视为“指向 const char 的指针”还是“指向 char 的指针”。

如果是前一种情况,那么我预计会出现错误。直到大约 2004 年,C++ 在将文字视为指向 char 的指针方面与 C 保持一致,因此允许赋值。所以我猜你的问题是确定你正在使用的规范版本,这可能取决于你使用的 VC++ 版本以及你选择的任何编译器选项。

MSDN C++ reference表示 VC++ 将字符串文字视为非常量。我将留给 VC++ 专家进一步评论。

关于c++ - 这段代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3080137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com