我是C语言的初级程序员,请原谅我,如果我的语言/风格不专业。
问题: 我正在尝试确定字符数组的大小,以便稍后我可以知道要使用malloc()分配的大小。
我的代码:
char *dest;
char *src1 = "Test String";
char src2[] = "Testing!";
dest = (char *) malloc( sizeof(src1) );
问题是我想确定src1和src2的内存大小。即src1的大小应为11,src2的大小应为8。 但是我从sizeof()收到的结果是:
但是如何正确确定src1的大小?怎么来sizeof(src2)工作但sizeof(src1)不工作?
如果我不清楚我要做什么,请回复,我会尽量让它更清楚。
提前致谢。
答案 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