我正在审核的代码使用以下字符串赋值
char *str;
str ="";
然后编码器使用这个'str'暂时保存一个字符串。
str = "This is a message";
fwrite(str, 1 ,strlen(str), fp);
然后在其他地方再次使用此str来分配具有类似用途的新字符串。
我知道这有效,我想知道这是如何工作的。
你怎么能声明一个char
指针并让它指向一个这样的字符串?
这个指针可以容纳的最大字符串长度是多少?
这个字符串存储在哪里?它会自动malloc
吗?
答案 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即将存储字符,但你是 分配指针。
常量字符串始终表示指向该字符串的指针。