gpt4 book ai didi

c++ - 基本的 C 风格字符串内存分配

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

我正在使用现有代码开发一个项目,该代码主要使用 C++,但使用 C 风格的字符串。采取以下措施:

#include <iostream>
int main(int argc, char *argv[])
{
char* myString = "this is a test";
myString = "this is a very very very very very very very very very very very long string";
cout << myString << endl;
return 0;
}

这编译并运行良好,输出是长字符串。

但是我不明白为什么它有效。我的理解是

char* myString 

是一个指针,指向一个足够大的内存区域来保存字符串文字“this is a test”。如果是这样,那么我如何才能在同一位置存储更长的字符串?由于试图将长字符串塞入为较短字符串预留的空间,我预计它会在执行此操作时崩溃。

显然,对这里发生的事情存在基本的误解,所以我感谢任何帮助理解这一点。

最佳答案

你不是在改变内存的内容,你是在改变指针的值以指向一个不同的内存区域,它包含“这是一个非常非常非常非常非常非常非常非常非常非常长的字符串”

请注意,char* myString 仅为指针分配足够的字节(通常为 4 或 8 个字节)。当您执行 char* myString = "this is a test"; 时,实际发生的是 甚至在您的程序开始之前,编译器在可执行文件中分配空间 image 并将 "this is a test" 放入内存中。然后当你做 char* myString = "this is a test"; 它实际上做的只是为指针分配足够的字节,并使指针指向它在编译时已经分配的内存, 在可执行文件中。

所以如果你喜欢图表:

char* myString = "this is a test";

(allocate memory for myString)

---> "this is a test"
/
myString---

"this is a very very very very very very very very very very very long string"

然后

myString = "this is a very very very very very very very very very very very long string";

"this is a test"

myString---
\
---> "this is a very very very very very very very very very very very long string"

关于c++ - 基本的 C 风格字符串内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142740/

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