strlen和sizeof对于基于Pointer和Array的init的不同答案

1s2*_*e7v 10 c c++

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

基本上,我这样做了......

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

我的输出是

7 4
7 8
Run Code Online (Sandbox Code Playgroud)

我无法说明原因为sizeof str14.请解释这些之间的区别.

Rob*_*nes 9

因为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));
Run Code Online (Sandbox Code Playgroud)


Alo*_*ave 6

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

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