【问题标题】:C string memory allocation implicit?C字符串内存分配隐式?
【发布时间】:2011-04-03 20:19:11
【问题描述】:

sizeof(test) 返回 24。它是一个由 3 个char* 指针组成的数组,在我的机器上每个指针有 8 个字节。我的问题是 C 是否也为字符正确分配空间?我猜是这样,因为这行得通,但我想确保我做得正确。

char* test[] = {"QW", "BT", "GH"};
int size = sizeof(test) / sizeof(char*);

【问题讨论】:

    标签: c string multidimensional-array memory-management bytearray


    【解决方案1】:

    是的,确实如此。不过,这些字符可能位于内存的只读部分。

    【讨论】:

      【解决方案2】:

      是的,编译器将为字符串文字分配空间(通常在只读静态数据部分)。

      【讨论】:

        【解决方案3】:

        是的。该值位于内存中数组中使用的 *char 指针所指向的地址处。所以是的,它存储在内存中。

        【讨论】:

          【解决方案4】:

          我在 the Standard 中对 6.4.5/5 的改写

          ...字符串文字被实现为具有“char”类型的静态存储持续时间的数组...

          因此,对象被分配为任何其他static 变量

          static int arr[100] = {0};
          if (strcmp(foo, "bar")) exit(0);
          int *ptr = malloc(100 * sizeof *ptr);
          

          数组arr和字符串字面量"bar"的分配方式相同;与分配ptr 的方式不同。

          【讨论】:

          • 请注意,它们也是不可修改的。
          猜你喜欢
          • 2011-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-27
          • 1970-01-01
          • 2013-09-27
          • 2021-11-20
          • 1970-01-01
          相关资源
          最近更新 更多