我们能否借助单个字符指针存储整个字符串?如果可以,该怎么做?

我们能否借助单个字符指针存储整个字符串?如果可以,该怎么做?

这里 p 是一个字符指针,而不是数组!但编译器没有给出警告或错误?

    char  *p = "Vladimir";

答案1

这只是一个问题解释*p是一个字符,你是对的。

string.h但来自或的C 例程stdio.h解释 p作为指向第一的“字符串”的字符,其后的字符位于连续的地址p+1p+2依此类推,并且约定以零字符'\0'(由编译器隐式添加!)终止“字符串”。

我在这里使用引号表示“字符串”,因为 C(与 C++ 相反)根本没有原生字符串类型。

C 正是使用这个指向字符的指针来表示“字符串”。因此,C“字符串”不能包含'\0'字符,并且总是使用一个char 更多的比第一眼看到的更大空间。

答案2

字符“Vladimar”被存储为字符串文字,存储在可执行映像的只读段中。指针被分配给起始地址字符串文字。

请注意,编译器会以空字符结尾字符串文字。C 中的字符串处理函数依赖于空字符结尾。当找到空字符结尾时,函数通常会停止处理字符串。因此,以下代码可行:

gets(p);

C 的一个怪癖是可以将非常量指针分配给只读字符串文字(在 C++ 中,这样做是无效的)。

“字符串文字”是来自源字符集的字符序列,用双引号 (" ") 括起来。字符串文字用于表示字符序列,这些字符合在一起形成以空字符结尾的字符串。

相关内容