字符 s1[ ] = " xyz" 字符 *s1 = "xyz"

char s1[ ] = " xyz" and char *s1 = "xyz"

本文关键字:字符 xyz s1      更新时间:2023-10-16

我正在尝试用该值初始化s1,稍后在scrushe()中初始化。我正在更改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] != '' ; ++i) {
                for (j=0; s2[j] != ''; j++) {
                        if (s2[j] == s1[i])
                                break;

                }
           if(s2[j] == '')
                s1[k++] = s1[i] ;
        }
        s1[k++] = '' ;
}

区别在于:

声明:

char s1[] = "xyz abc zzz" ; 

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

char *s1 = "xyz abc zzz"; 

CCD_ 1是指向不可修改的存储器区域中的字符串文字的指针;因此,修改字符串是非法操作。