竹叶风轻敲 2024-04-26 22:09 采纳率: 48.9%
浏览 1
已结题

指针运算,报核心已存储的问题

img


没加if判断能计算出位置之间的距离,我想加个if判断下如果首地址到目标地址之间有跟目标地址字符重复的话直接退出,这里应该打印出0的啊,为啥报核心已存储啊

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-04-26 22:09
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题分析:

    在代码中,数组指针arr和arr1是函数find的传入参数,表示要查找的目标数组的起始地址和终止地址,函数的作用是计算这两个地址之间相隔的元素个数。在函数中,可以使用指针运算实现对两个地址之间的元素的计数。

    但是,在函数开头的while循环中,你错误地使用了赋值运算符=代替了比较运算符==,在语法上构成了一个表达式,它可以将arr所指向的元素的值修改为arr1所指向的元素的值。由于在循环执行之前,arr和arr1的值均为指向字符串"hjhsdsd"的指针,字符串"hjhsdsd"被存储在程序的静态数据段中,尝试修改程序静态数据段中已存储的字符导致了“核心已存储”的错误。

    解决方案:

    1. 修改while循环中的判断语句,使用比较运算符==而不是赋值运算符=。

    2. 判断字符是否重复时需要用到数组遍历,可以考虑使用for循环遍历数组。

    修改后的代码如下:

    #include <stdio.h>
    
    int find(char* arr, char* arr1) {
        int num = 0;
        while (arr != arr1) {
            if (*arr == *arr1) break;
            num++;
            arr++;
        }
        return num;
    }
    
    int main() {
        char *arr = "hjhsdsd";
        printf("%d", find(arr, arr + 2));
        return 0;
    }
    

    经过修改后,程序可以正确地输出0。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月4日
  • 已采纳回答 4月26日
  • 创建了问题 4月26日