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

时间:2012-10-28 16:18:52

标签: c

我是C语言的初级程序员,请原谅我,如果我的语言/风格不专业。

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

我的代码:

char *dest;

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

dest = (char *) malloc( sizeof(src1) );

问题是我想确定src1和src2的内存大小。即src1的大小应为11,src2的大小应为8。 但是我从sizeof()收到的结果是:

  • sizeof(* src1)因为sizeof(char)
  • 而为1
  • sizeof(src1)是4< - 我不知道为什么有人可以解释一下?
  • sizeof(src2)是9< - 我猜这是我想要的,并且null终止符计数 进入大小

但是如何正确确定src1的大小?怎么来sizeof(src2)工作但sizeof(src1)不工作?

如果我不清楚我要做什么,请回复,我会尽量让它更清楚。

提前致谢。

3 个答案:

答案 0 :(得分:3)

sizeof返回传递给它的类型的大小。因为src1是一个指针,它返回4。

如果您只使用字符串,只需使用strlen(src1)来获取字符串的大小。 您的分配行应该看起来像

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

答案 1 :(得分:2)

sizeof(src1)

为您提供环境指针的大小而不是数组的长度。从您的环境中指针的结果大小为4.
如果要确定指针指向的字符串文字的大小,则需要使用strlen,如src1的情况。

sizeof(src2) 

返回字符数组的大小。

为了理解两者之间的区别,你应该明白:

What is the difference between char a[] = “string”; and char *p = “string”;

答案 2 :(得分:1)

如果您想要字符串的长度(从您提供的数字看起来是这样),您可以使用strlen(char *)函数。 (strlen函数是<string.h>

的一部分

只需传递你的字符串:

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