我知道在 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/