AJDN.Z 2022-03-13 19:53 采纳率: 0%
浏览 11

修改字符串指针内容时,内存报错

问题背景 :

根据 教程c语言进阶操作获取strchr结果前面的字符,但提示访问出错

pprogram received signal SIGSEGV, Segmentation fault

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char const *argv[])
{
char *a="hello";
char *p=strchr(a,'l');
char *t=(char *)malloc(strlen(p)+1);
t=strchr(p+1,'l');
// a or a[]都能创建数组,a是一个指针,指向第一个字符的地址,对a取值,a,得到的是第一个数组的值同时也是整个字符串数组,
printf("第一个找到l的字段%s\n",p);
printf("第二个找到l的字段为%s\n",t);
// 得到l前面的字符
char c=*p;
*p='\0';
char *r=0;
strcpy(r,a);
printf("l前面的字符为 %s",r);
*p=c;
return 0;
}

我的解答思路和尝试过的方法

将*a 换成a[]结果一样

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-03-13 20:00
    关注

    char *a="hello"; 这么写的话,a是常量指针,内容是不可以修改
    只能是 char a[] = "hello";

    评论

报告相同问题?

问题事件

  • 创建了问题 3月13日