将字符串分配给char *变量

时间:2013-06-28 04:43:15

标签: c string char

我正在审核的代码使用以下字符串赋值

char *str;
str ="";
然后编码器使用这个'str'暂时保存一个字符串。

str = "This is a message";
fwrite(str, 1 ,strlen(str), fp);

然后在其他地方再次使用此str来分配具有类似用途的新字符串。

我知道这有效,我想知道这是如何工作的。 你怎么能声明一个char指针并让它指向一个这样的字符串? 这个指针可以容纳的最大字符串长度是多少? 这个字符串存储在哪里?它会自动malloc吗?

4 个答案:

答案 0 :(得分:2)

指针不“保持”一个字符串,它只指向原始字符串所在的位置。在这种情况下,字符串文字作为程序的一部分保存,指针设置为它;当你重新分配指针时,你没有做任何副本,只是将指针设置为不同的地址。

字符串的最大大小因此是字符串文字的最大大小,这取决于编译器和可用程序空间量。

如果要实际制作字符串的副本,首先必须为其分配一些存储空间,该存储空间必须大于字符数。然后使用strcpy制作副本。

答案 1 :(得分:1)

此字符串静态包含在对象模块中。对于这样的字符串,您不需要malloc内存,因为它们已经有一个由编译器分配的内存。因此,你也无法释放这样的指针。如果你在exe文件中查看十六进制编辑器,你可以看到它包含在这个字符串中,而不是动态分配的字符串,只要可执行文件运行,它就只存在于内存中。

此类字符串的最大大小取决于您的编译器。

答案 2 :(得分:0)

char*只是指向char(或其中一系列)的指针。

你可以让它指向你喜欢的任何“字符串”。在给出的示例中,它们只是更改指针的值(即str指向的内容)。

答案 3 :(得分:0)

  

char *name;

     

name="some string"; // name指向地址的地址   字符串。

与:

不相似
  

char str [];

     

str =“some string”; //记住这种类型的陈述   不会起作用,因为str即将存储字符,但你是   分配指针。

常量字符串始终表示指向该字符串的指针。