无法更新c中给定char指针的值

时间:2018-01-22 09:50:26

标签: c string pointers

我正在使用==运算符检查字符串之间的直接比较。当两个字符串都是正确比较的字符指针时。我很快意识到它发生了,默认情况下编译器会为两个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;
}

str1str2的地址相同。所以我想检查更新一个指针是否实际影响其他指针。

但是,我遇到了分段错误。为什么我会遇到段错?

1 个答案:

答案 0 :(得分:7)

尝试修改字符串文字是未定义的行为。字符串文字是只读的 - 它是不可修改的。

也不要尝试解释未定义的行为。在这里你有segmenattion故障试图访问不可修改的内存。

您可以使用strdup

char *str1=strdup("Sudhanshu");
char *str2=strdup("Sudhanshu");

这将允许您更改字符串,并且还需要释放strdup在您使用完毕后分配的内存。

strdup是POSIX的事情 - 如果你没有这个,请使用malloc strcpy组合来模仿相同的行为。

同样从评论Bart Friederichs获得的是,你可以声明一个char的数组,并用文字本身初始化它们。

char str1[]="Sudhanshu";

str1可以修改,在这种情况下你也不需要明确释放内存。

即使将指针与相同的字符串文字进行比较 - 它们也可能不指向相同的内存位置。这可能会有所不同因此,您无法确定它们总是会导致两个相同值的比较。这可能会因编译器而异。