这个问题已经在这里有了答案:




9年前关闭。






基本上,我做到了...

 char *str1 = "Sanjeev";
 char str2[] = "Sanjeev";
 printf("%d %d\n",strlen(str1),sizeof(str1));
 printf("%d %d\n",strlen(str2),sizeof(str2));

我的输出是
7 4
7 8

我无法给出sizeof str1为什么是4的原因。请解释一下两者之间的区别。

最佳答案

因为sizeof可以为您提供数据类型的大小(以字节为单位)。 str1的数据类型为char *,即4个字节。相反,strlen为您提供了不包含null终止符的char字符串长度,因此为7。sizeof str2是8个字节的char数组,这是包含null终止符的chars数量。

请参阅C-FAQ中的此项:http://c-faq.com/~scs/cclass/krnotes/sx9d.html

试试这个:

 char str2[8];
 strncpy(str2, "Sanjeev", 7);
 char *str1 = str2;
 printf("%d %d\n",strlen(str1),sizeof(str1));
 printf("%d %d\n",strlen(str2),sizeof(str2));

关于c++ - 对于基于String的Pointer和Array的strlen和sizeof不同的答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5925927/

10-13 09:46