gpt4 book ai didi

char c1[ ] ="abcde"工作而 char *c1 ="abcde"结果是错误的?

转载 作者:太空宇宙 更新时间:2023-11-04 02:45:24 24 4
gpt4 key购买 nike

我正在研究“c 编程语言”练习 2.4,它删除 s1 中与字符串 s2 中的任何字符匹配的每个字符。下面是我的代码,它有效。但是,如果我将 Main 函数中的定义从 char c1[ ]="abcde" 更改为 char *c1="abcde",则会出现段错误(核心倾倒)。知道为什么吗?

#include<stdio.h>
#define UNREPEAT 1
#define REPEAT 0

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

void main(){
char c1[]="abcde";
char c2[]="cd";
printf("c1 is %s\n",c1);
squeeze(c1,c2);
printf("the final result is %s\n",c1);
}

void squeeze(char *s1,char *s2){
int i,j,judge;
int k=0;
for(i=0;*(s1+i)!='\0';i++){
judge=UNREPEAT;
for(j=0;*(s2+j)!='\0';j++){
if (*(s1+i)==*(s2+j)){
judge=REPEAT;
break;}
}

if( judge==UNREPEAT){
* (s1+k)=*(s1+i);
k++;}

}
*(s1+k)='\0';
}

最佳答案

因为

char c1[] = "abcde";

声明一个数组,它是可读可写的并且总是有6个字节(如果你考虑终止'\0')你不能扩展它但是你当然可以用它来存储更少的字节。

同时

char *c1 = "abcde";

是一个静态字符串文字,它不能被修改,你应该总是使用 const 限定符声明字符串文字,这样如果你试图修改它的内容,编译器会警告你,这是非法的, 只需使用

const char *c1 = "abcde";

关于char c1[ ] ="abcde"工作而 char *c1 ="abcde"结果是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27970677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com