【发布时间】:2019-12-12 22:20:24
【问题描述】:
我有一个指针数组,当我尝试这个 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)
我在这里做错了什么?
【问题讨论】:
-
在第二个示例中,您使用
'm'的字符值作为指针,这是一个无效的指针值。删除一个*为printf("%s\n",*(ptr+2)+7); -
让我们更容易理解正在发生的事情的一件事是记住对于任何指针
ptr和索引i,表达式*(ptr + i)是完全 相等的到ptr[i]。尝试将您的指针算术表达式转换为数组索引语法,它应该会变得更加清晰。
标签: c pointers printf undefined-behavior c-strings