sid*_*fan 2 c arrays char segmentation-fault
#include<stdio.h>
int main(void)
{
char * p= "strings are good";
printf("%s",*p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么我在这里得到分段错误?
有人可以告诉我为什么我在这里得到分段错误?
如果转换规范无效,则行为未定义.282)如果任何参数不是相应转换规范的正确类型,则行为未定义.
1 使用不可移植或错误的程序结构或错误数据时的未定义行为行为,本国际标准不对此作出任何要求.
2 注意可能的未定义行为包括完全忽略不可预测结果的情况,以及以环境特征(有或没有发出诊断消息)的文档化方式执行转换或程序执行,终止翻译或执行(带有发出诊断信息).
*p是类型的char.%s期望类型的参数char *.这将调用未定义的行为.在这种情况下,一切都可能发生 有时你可能得到预期的结果,有时候不会.这也可能导致程序崩溃或分段错误(这种情况就是这种情况).
因为%s,您需要传递sting/literal的起始地址.
更改
printf("%s",*p);
Run Code Online (Sandbox Code Playgroud)
至
printf("%s",p);
Run Code Online (Sandbox Code Playgroud)