一道关于指针的C语言题目
本文介绍了一道关于指针的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屋!
查看全文