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 str1
的sizeof 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()
给出字符串的长度为7
。 sizeof()
是一个编译sizeof(str1)
算符, sizeof(str1)
给出了实现的指针大小(即4
)。
char str2[] = "Sanjeev"; printf("%d %d\n",strlen(str2),sizeof(str2));
sizeof(str2)
给出数组的大小,即8*sizeof(char)
即8
[包括NUL
终止符]