一道关于指针的C语言题目

查看:95
本文介绍了一道关于指针的C语言题目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

#include <stdio.h>
#include <stdlib.h>

int del_substr(char *str, char const *substr);

int main(int argc, char const *argv[]) {

    char *str = "abcdefg";
    char const *substr = "cde";
    printf("%d\n", del_substr(str, substr));
    printf("%s\n", str);

    return 0;
}

int del_substr(char *str, char const *substr) {

    if (str == NULL || substr == NULL) {
        return 0;
    }

    char const *substr_l = NULL;
    char *temp = str;
    do {
        for (substr_l = substr; *substr_l; substr_l++) {
            if (*str != *substr_l) {
                break;
            }
            str++;
        }
        if (*substr_l) {
            temp++;
            str = temp;
        } else {
            for (; *str; ++str) {
                printf("%s\n", str);
                *temp = *str;
                ++temp;
            }
            *temp = '\0';
            return 1;
        }
    } while (*str);

    return 0;
}

我的代码在*temp = *str;出了问题,我不知道为什么

解决方案

你的算法没有发现问题,出问题的是因为

char *str = "abcdefg";

这里这个字符串和后面printf中的"%sn"实际上是所谓的『字符串字面值』,是存储在『文字常量区』,内容不可修改。注意一下它和

char str[] = "abcdefg";

的区别,后者是在栈上的一个数组,是可以修改的。出问题的那一行就是试图修改字符串常量,所以崩溃了。你的程序使用后面的方式就可以了。

这段代码在Linux上运行,会得到SegmentFault错误.

这篇关于一道关于指针的C语言题目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆