c - C 如何知道赋值后一个 char* 有多长?

标签 c arrays string char

我知道在 C 中有两种使用“字符串”的方法--

char foo[NUMBER] = "bar";

char *foo = "bar";

我还知道,由于 C 存储前者的方式,它们是不可变的——我无法将新字符串重新分配给数组。所以要有一个可变的字符串 var,我必须使用一个指针。但是 C 如何存储/知道我正在分配的新字符串的长度——

*foo = "hello";

这个字符串比第一个字符串长,所以如果 C 在第一次赋值时发现它只需要 3 个字节到存储“foo”,并因此分配了那 block 内存,它如何改变它,如果它必须让 foo 指向一个更长的字符串?

最佳答案

当您在“C”中写下双引号字符串时,这些字符串将存储到内存的文本段(常量数据)中。

char foo[NUMBER] = "bar" : 将 "bar" 复制到数据段。

char *foo = "bar" : char *foo存入数据内存,foo只指向"bar" 存储在文本段中。

您可以随时通过 foo = "hello" 更改 foo 应指向的位置。

关于c - C 如何知道赋值后一个 char* 有多长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33162566/

相关文章:

javascript - 如何根据页面大小拆分json字符串?

java - 对齐二维数组打印输出 [Java]

string - Lua中的字符串

c - 将指针数组传递给函数

objective-c - 不同文件中的字符串文字是否具有相同的内存地址?

c - 试图将摩尔斯电码转换为英语。挣扎

string - java6 : Appending char to a string

c++ - 对于大于 32,767 的值,强制转换为 "signed int"并返回 "signed short"如何工作?

arrays - shell编程: define array including zero-padded values

java - 删除Java String数组中的部分元素