【发布时间】:2017-07-17 14:10:37
【问题描述】:
#include "stdio.h"
#include "string.h"
int main(){
char p[]="CALIFORNIA\n";
char *x ="HELLO";
printf("%lu\n",strlen(p+sizeof(p)-sizeof(x)+5) );
}
我搜索了所有内容,但找不到当 strlen 的参数是表达式时会发生什么。最后一条语句的结果是2,谁能解释一下?
【问题讨论】:
-
提示:与
strlen()无关。p + sizeof p - sizeof x + 5指向什么?如果你不能回答,那么你需要了解指针和指针算法(可能还有sizeof)。另外,strlen()是做什么的? -
strlen将字符串作为参数,然后它“遍历”字符串直到 \0,计算每个字符,然后返回该计数。所以参数必须指向一个字符串。它可以是一个表达式,但对表达式求值的结果必须是一个指向字符串的指针。现在,正如 Iharob 建议的那样,检查您在做什么。 -
momo:好奇:为什么将
"%lu"编码为strlen(p)?这是通过实验发现的吗?,代码示例?'%zu"怎么样? -
请注意,
sizeof(x)会给出不同的结果,具体取决于您构建的是 32 位还是 64 位程序。 -
@IharobAlAsimi 我了解 sizeof 和 strlen。在我看来,表达式是将 9*sizeof(char) 添加到 p 的起始地址,所以 strlen 是从 p[] 的第 9 位开始计算字符数?这给了我们最后 2 个字符。我现在理解正确吗?
标签: c string sizeof strlen pointer-arithmetic