strlen和sizeof的不同答案,用于基于指针和数组的String的init

可能重复:
C:指针和数组之间的差异
结果大小不同

基本上,我这样做了……

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 str1sizeof str1为4.请解释这些之间的区别。

因为sizeof为您提供数据类型的字节大小。 str1的数据类型是char *,其中4个字节。 相反, strlen为您提供字符串的长度,不包括空终止符,因此7. size2 str2是8字节的char数组,这是包括空终止符的字符数。

请参阅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)); 

str1是指向char的指针,系统上指针变量的大小为4。
str2是堆栈上的char数组,它存储8个字符,“s”,“a”,“n”,“j”,“e”,“e”,“v”,“\ 0”因此它的大小是8

需要注意的是,指向各种数据类型的指针的大小将是相同的,因为它们指向不同的数据类型,但它们仅占用该系统上指针的大小。

sizeof(str1) is sizeof(char*)
sizeof str2 is sizeof(char array)

sizeof(char数组)应该等于strlen(char数组)+ 1(NULL终止)。
好吧,如果将char数组传递给函数,sizeof所示的大小将会改变。 原因是char数组仅作为char *传递。

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

strlen()给出字符串的长度为7sizeof()是一个编译sizeof(str1)算符, sizeof(str1)给出了实现的指针大小(即4 )。

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

sizeof(str2)给出数组的大小,即8*sizeof(char)8 [包括NUL终止符]