char数组的内存分配

Dra*_*orn 7 c memory-management

假设你有 -

struct Person {
    char *name;
    int age;
    int height;
    int weight; 
 };
Run Code Online (Sandbox Code Playgroud)

如果你这样做 -

struct Person *who = malloc(sizeof(struct Person));
Run Code Online (Sandbox Code Playgroud)

C如何知道为name变量分配多少内存,因为这可以容纳大量的数据/字符串?我是C的新手并且对内存分配感到困惑.

Alo*_*ave 4

它不会知道,您必须单独为其分配内存。

struct Person *who = malloc(sizeof(struct Person));
Run Code Online (Sandbox Code Playgroud)

分配足够的内存来存储 类型的对象Person
Person对象内部,成员name仅占据相当于指向 的指针大小的空间char
上面malloc只是分配了那么多空间,为了能够对成员指针执行任何有意义的操作,您必须单独为其分配内存。

#define MAX_NAME 124
who->name = malloc(sizeof(char) * MAX_NAME);
Run Code Online (Sandbox Code Playgroud)

现在该成员name指向124堆上大小为字节的动态内存,并且可以进一步使用它。

另外,在使用完成后,您需要free明确记住它,否则最终会导致内存泄漏。

free(who->name);
free(who); 
Run Code Online (Sandbox Code Playgroud)

  • 我假设 Q 被无效标记为“C++”,因为 OP 说 *How would C....* 和 *I am new to C...* 如果 Q 是 C++,答案与使用“std”非常相似::字符串`。 (4认同)
  • @ZiG 确实有相似之处(尽管您更愿意使用“new”而不是“malloc”)。但在 C++ 中,您通常不必搞乱任何低级内存管理,例如使用“std::string”作为字符串,而不是普通的 char 数组(或指针),或者使用“std::vector” ` 而不是自制的动态数组。 (2认同)