我想知道str
所指向的字符串分配到了哪里,因为(我假设)malloc只为指向堆的指针腾出了空间。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int a;
char* str;
} Bar;
int main(int argc, char *argv[])
{
Bar* bar_ptr = malloc(sizeof *bar_ptr);
bar_ptr->a = 51;
bar_ptr->str = "hello world!";
printf("%d\n", bar_ptr->a);
printf("%s\n", bar_ptr->str);
free(bar_ptr);
return 0;
}
2条答案
按热度按时间ff29svar1#
正确--所有的结构类型存储的都是字符串中第一个字符的地址。字符串内容存储在“其他地方”--字符串文字、另一个动态分配的块、
static
或auto
数组等。您可以声明所有
auto
:您可以动态分配所有资源:
编辑
而且还有其他的可能性,但重点是字符串本身是与struct示例分开存储的。
gfttwv5a2#
如前所述,字符串存储在一个只读数据段中。您可以打印字符串存储的地址(以十六进制格式),如下所示: