我正在使用==
operator 检查字符串之间的直接比较.当两个字符串都是正确比较的字符指针时.我很快意识到它发生了编译器默认情况下为两个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;
}
Run Code Online (Sandbox Code Playgroud)
地址str1
和str2
是一样的.所以我想检查更新一个指针是否实际影响其他指针.
但是,我遇到了分段错误.为什么我会遇到段故障?
尝试修改字符串文字是未定义的行为.字符串文字是只读的 - 它是不可修改的.
也不要试图解释未定义的行为.在这里你有segmenattion故障试图访问不可修改的内存.
您可以使用strdup
,虽然
char *str1=strdup("Sudhanshu");
char *str2=strdup("Sudhanshu");
Run Code Online (Sandbox Code Playgroud)
这将允许您更改字符串,并且还需要释放strdup
使用它时分配的内存.
strdup
是一个POSIX的东西 - 如果你没有它,使用malloc
strcpy
组合来模仿相同的行为.
另外,从评论得到的Bart Friederichs
是你可以声明一个数组char
并用文字本身初始化它们.
char str1[]="Sudhanshu";
Run Code Online (Sandbox Code Playgroud)
这str1
是可修改的,在这种情况下你也不需要显式释放内存.
即使您将指针与相同的字符串文字进行比较 - 它们也可能不指向相同的内存位置.这可能会有所不同 因此,您不能确定它们总是会导致两个相同值的比较.这可能会因编译器而异.
归档时间: |
|
查看次数: |
341 次 |
最近记录: |