gpt4 book ai didi

c - printf ("%c",*(*(ptr+i)+x)) 和 printf ("%s",*(*(ptr+i)+x)) 的区别

转载 作者:太空宇宙 更新时间:2023-11-04 07:45:43 26 4
gpt4 key购买 nike

我有一个指针数组,当我尝试此 C 代码时出现段错误错误。我在这里做错了什么?

  char *ptr[] = {"exam","example","testexample"};
printf("%c\n",*(*(ptr+2)+7));
printf("%s\n",*(*(ptr+2)+7));

在给出预期结果的第一个打印语句的输出中

   printf("%c\n",*(*(ptr+2)+7)); 
  m

但是第二个不是给出

的输出
  mple

给予

   printf("%s\n",*(*(ptr+2)+7));    Segmentation fault (core dumped)

我做错了什么?

最佳答案

表达式的类型

*(*(ptr+2)+7)

字符。所以第一次调用printf是正确的。

但是第二次调用是不正确的,因为格式说明符 %s 需要一个类型为 char * 的参数。所以通过表达式 *(*(ptr+2)+7) 获得的字符的值是字符 'm'(例如在 ASCII 中有值 100) 被解释为地址。

在第二次调用中只需使用

*(ptr+2)+7

这是一个演示程序

#include <stdio.h>

int main(void)
{
char *ptr[] = { "exam", "example", "testexample" };

printf( "%c\n", *( *( ptr + 2 ) + 7 ) );

printf( "%s\n", *( ptr + 2 ) + 7 );

return 0;
}

它的输出是

m
mple

关于c - printf ("%c",*(*(ptr+i)+x)) 和 printf ("%s",*(*(ptr+i)+x)) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57357807/

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