C 确定内存中字符数组的大小

C 确定内存中字符数组的大小,c,C,我是C语言的初学者,如果我的语言/风格不专业,请原谅 问题: 我试图确定字符数组的大小,以便稍后使用malloc()知道要分配的大小 我的代码: char *dest; char *src1 = "Test String"; char src2[] = "Testing!"; dest = (char *) malloc( sizeof(src1) ); 问题是我想确定src1和src2在内存中的大小。i、 e.src1的尺寸应为11,src2的尺寸应为8。 但是我从sizeof()得到的

我是C语言的初学者,如果我的语言/风格不专业,请原谅

问题: 我试图确定字符数组的大小,以便稍后使用malloc()知道要分配的大小

我的代码:

char *dest;

char *src1 = "Test String";
char src2[] = "Testing!";

dest = (char *) malloc( sizeof(src1) );
问题是我想确定src1和src2在内存中的大小。i、 e.src1的尺寸应为11,src2的尺寸应为8。 但是我从sizeof()得到的结果是:

  • sizeof(*src1)是1,因为sizeof(char)
  • sizeof(src1)为4 提供环境中指针的大小,而不是数组的长度。根据结果,环境中指针的大小为4。
    如果要确定指针指向的字符串文字的大小,如
    src1
    的情况,则需要使用
    strlen

    sizeof(src2) 
    
    返回字符数组的大小

    为了理解两者之间的区别,您应该了解:


    如果您想要字符串的长度(从您提供的数字中可以看出),可以使用
    strlen(char*)
    函数。(strlen函数是
    的一部分)

    只需像这样传入字符串:

    int len1 = strlen(src1); // This will give 8 as intended
    

    sizeof
    返回传递给它的类型的大小。由于src1是指针,它返回4

    如果您只使用字符串,只需使用
    strlen(src1)
    即可获得字符串的大小。 然后,您的分配行应该如下所示

    dest = (char*) malloc(strlen(src1) + 1); // add one for the \0
    
    dest = (char*) malloc(strlen(src1) + 1); // add one for the \0