可能的重复:
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.请解释这些之间的区别.
因为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)
str1是指向char的指针,系统上指针变量的大小是4.
str2是堆栈上的char数组,它存储8个字符,"s","a","n","j","e", "e","v","\ 0"因此其大小为8
需要注意的是,指向各种数据类型的指针的大小将是相同的,因为它们指向不同的数据类型,但它们仅占用该系统上指针的大小.