3

我是 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) 是 1,因为 sizeof(char)
  • sizeof(src1) is 4 <--我不知道为什么有人可以解释一下吗?
  • sizeof(src2) is 9 <--我猜这就是我想要的,空终止符也计入大小

但是如何正确确定 src1 的大小呢?以及 sizeof(src2) 为何有效但 sizeof(src1) 无效?

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

提前致谢。

4

3 回答 3

3

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

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

dest = (char*) malloc(strlen(src1) + 1); // add one for the \0
于 2012-10-28T16:21:04.997 回答
2
sizeof(src1)

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

sizeof(src2) 

返回字符数组的大小。

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

char a[] = “string”; 和有什么区别?和 char *p = “字符串”;

于 2012-10-28T16:20:32.070 回答
1

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

只需像这样传递您的字符串:

int len1 = strlen(src1); // This will give 8 as intended
于 2012-10-28T16:21:04.720 回答