0x00007FFA837F2487 (ucrtbased.dll)处(位于 指针.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000000000000068 时发生访问冲突

问题遇到的现象和发生背景

img

运行结果及报错内容

#include <stdio.h>
int main()
{

char* p = "hello";
char c[10] = "hello";
printf("%s\n", p[0]);
printf("%s\n", c[0]);

}
出现标题错误求大家帮忙

printf("%s\n", p[0]);
说明一下:
%s格式会认为你后面的变量是字符串地址,但p[10]是p字符串的第一个字符。程序会认为这个字符的ASCII码是一个地址,从而到这个地址取读字符串进行输出,导致错误提示为0x0000000000000068这个地址不能访问,有冲突。因为这个地址是系统保护地址,不能访问的。0x68正好是字符h的ASCII码
修改方法:
如果想输出字符串,那么将p[0]改为p,如果想输出p[0]这个字符,那么用%c

第一个p是字符指针,输出直接用p即可,第二个是字符数组,只输出第一个字符的话前面应该是%c控制

img


#include <stdio.h>
int main()
{
char* p = "hello";
char c[10] = "hello";
printf("%s\n", p);
printf("%s\n", c);
}

img