对于基于指针和数组的 String init 的 strlen 和 sizeof 的不同答案[重复]
在 C 编程语言中,当声明一个数组和指向字符串的指针,可以使用“strlen”和“sizeof”函数获得不同的输出。理解这种差异对于有效的内存管理和数据处理至关重要。
为了说明这种差异,请考虑以下代码片段:
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
“strlen”函数返回字符串中的字符数,不包括空终止符。在这两种情况下,字符串都包含 7 个字符。另一方面,“sizeof”函数返回内存中数据类型的大小。
对于指针“str1”,“sizeof(str1)”返回指针变量本身的大小,在大多数系统上通常为 4 个字节。这是因为“str1”不是一个数组,而只是一个指向字符串“Sanjeev”的指针。
相比之下,“str2”是一个字符数组。 'sizeof(str2)' 返回整个数组的大小,包括空终止符。结果,它输出 8 个字节:7 个字节用于字符,1 个字节用于空终止符。
要进一步理解这个概念,请考虑以下修改后的代码:
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));
这此时,输出将是:
7 4 7 8
即使 'str1' 和 'str2' 引用相同的字符串,'sizeof' 输出仍然相同。这是因为“str1”仍然是一个指针,而“str2”仍然是一个数组。两者的“strlen”输出都保持为 7,因为它只计算字符串中的字符。
以上是为什么 C 中指针和基于数组的字符串初始化时'strlen”和'sizeof”返回不同的值?的详细内容。更多信息请关注PHP中文网其他相关文章!