我尝试了以下代码,以查看如何获取指针数据的大小:

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

 int main(){
  char *test_char_ptr = "This is just a test";
  int *test_int_ptr = (int *) malloc(16*sizeof(int));
  for(int i = 0; i<16; i++){
    test_int_ptr[i] = i;
  }
  printf("%s\n",test_char_ptr);
  printf("Test char 1: %d\n", (int)sizeof test_char_ptr );
  printf("Test char 2:%d\n", (int)sizeof *test_char_ptr );
  printf("Test char 3: %d\n", (int)((strlen(test_char_ptr)+1) * sizeof(char)));
  printf("Test int 1:%d\n", (int)sizeof test_int_ptr );
  printf("Test int 2:%d\n", (int)sizeof *test_int_ptr );
  return EXIT_SUCCESS;
 }


代码的输出是(在32位gcc 4.3上):

This is just a test
Test char 1: 4
Test char 2:1
Test char 3: 20
Test int 1:4
Test int 2:4


我认为sizeof(* test_char_ptr)会给我* test_char_ptr内部数据的大小。但是相反,它给了我1,我认为这是char的大小而不是数据。对于test_int_ptr也是如此。长话短说,我的问题是我如何获得指针或动态内存分配数组中的sizeof数据。

最佳答案

如果不自己维护信息,就无法在C中完成此操作。您创建了阵列,因此可以一次知道它们的大小,只需要自己跟踪即可。您可以创建一个数据结构来为您提供帮助,或者只是仔细维护阵列和大小信息,而无需任何数据结构。

另外,您的代码使用strlen()来获取字符串的大小-确保您记住返回的大小将不包含终止的空字符('\0');字符串常量的内存中大小为strlen(string) + 1

08-18 09:31
查看更多