#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,有人可以解释一下吗?
答案 0 :(得分:0)
使用指针算术。为了更清楚,只需运行这个示范程序。
#include <stdio.h>
#include <string.h>
int main(void)
{
char *x ="HELLO";
const size_t N = strlen( x );
for ( size_t i = 0; i < N; i++ )
{
printf( "%zu - %s\n", strlen( x + i ), x + i );
}
return 0;
}
它的输出是
5 - HELLO
4 - ELLO
3 - LLO
2 - LO
1 - O
至于你的例子,那么在这个陈述中
printf("%lu\n",strlen(p+sizeof(p)-sizeof(x)+5) );
表达式p + sizeof( p )
具有类型char *
,该表达式产生一个指针,该指针指向数组对象p
的最后一个元素之后的一个。
表达式p + sizeof( p ) - sizeof( x )
将指针移动到左侧(似乎sizeof(x)在系统中等于8)。表达式p + sizeof( p ) - sizeof( x ) + 5
将指针移动到右侧。
结果整个表达式产生一个指针,指向字符数组p
中的以下位置
char p[]="CALIFORNIA\n";
^
|
因此,"A\n"
字符串的长度等于2
。