我正在使用==
运算符检查字符串之间的直接比较。当两个字符串都是正确比较的字符指针时。我很快意识到它发生了,默认情况下编译器会为两个char指针变量分配相同的地址,因为它们保持相同的值。
#include<stdio.h>
void update(char *str2){
*(str2+2)='O';
}
int main(){
char *str1="Sudhanshu";
char *str2="Sudhanshu";
printf(" %s , %s ",str1,str2);
update(str2);
printf(" %s , %s ",str1,str2);
if(str1==str2){
printf("True\n");
}else
printf("False\n");
return 0;
}
str1
和str2
的地址相同。所以我想检查更新一个指针是否实际影响其他指针。
但是,我遇到了分段错误。为什么我会遇到段错?
答案 0 :(得分:7)
尝试修改字符串文字是未定义的行为。字符串文字是只读的 - 它是不可修改的。
也不要尝试解释未定义的行为。在这里你有segmenattion故障试图访问不可修改的内存。
您可以使用strdup
char *str1=strdup("Sudhanshu");
char *str2=strdup("Sudhanshu");
这将允许您更改字符串,并且还需要释放strdup
在您使用完毕后分配的内存。
strdup
是POSIX的事情 - 如果你没有这个,请使用malloc
strcpy
组合来模仿相同的行为。
同样从评论Bart Friederichs
获得的是,你可以声明一个char
的数组,并用文字本身初始化它们。
char str1[]="Sudhanshu";
str1
可以修改,在这种情况下你也不需要明确释放内存。
即使将指针与相同的字符串文字进行比较 - 它们也可能不指向相同的内存位置。这可能会有所不同因此,您无法确定它们总是会导致两个相同值的比较。这可能会因编译器而异。