gpt4 book ai didi

无法理解 strlen 表达式参数结果

转载 作者:行者123 更新时间:2023-11-30 21:38:54 26 4
gpt4 key购买 nike

#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,谁能解释一下怎么做吗?

最佳答案

这里使用了指针运算。为了让它更清楚,只需运行这个演示程序即可。

#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

关于无法理解 strlen 表达式参数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45146529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com