char s1 [] =“xyz”和char * s1 =“xyz”

时间:2013-08-24 20:08:07

标签: c++ c string pointers constants

我正在尝试用值初始化s1,然后在squeeze()中初始化。我正在改变s1。指针初始化会引发seg错误但阵列版本工作正常。有人能告诉我,如果我可以用指针版本做到这一点有什么问题吗?可能是因为我没有使用过malloc ??

int main() {

        char s1[] = "xyz abc zzz" ; // this works fine.
      // char *s1 = "xyz abc zzz"; // if i initialize like this it throws a seg fault. 

         char *s2 = "abx xxx xxx" ;
        squeeze(s1,s2) ;
        puts (s1) ;
        return 0 ;

}

void squeeze(char *s1, char *s2 ) {

        int i , j, k = 0;

        for (i=0 ; s1[i] != '\0' ; ++i) {

                for (j=0; s2[j] != '\0'; j++) {
                        if (s2[j] == s1[i])
                                break;


                }
           if(s2[j] == '\0')

                s1[k++] = s1[i] ;

        }

        s1[k++] = '\0' ;

}

1 个答案:

答案 0 :(得分:3)

区别在于:

宣言:

char s1[] = "xyz abc zzz" ; 

创建一个大小为strlen(RHS)+ 1的数组,并且可以修改。第二种形式

char *s1 = "xyz abc zzz"; 

s1是指向字符串文字的指针,该字符串文字位于不可修改的内存区域中;因此修改字符串是非法操作。