挤压函数中的错误,用于删除字符串之间的逗号 #包括 空隙挤压(半焦*s1,半焦*s2); main() { char*s1=“字符串”; char*s2=“弹簧”; 挤压(s1,s2); printf(“%s”,s1); } 空隙挤压(字符*s1,字符*s2) { int i=0,j=0,k=0,bool=1; 对于(i=0,k=0;s1[i]!='\0';i++) { 对于(j=0;s2[j]!='\0';j++) if(s1[i]==s2[j]) { bool=0; 打破 } 如果(bool) { s1[k++]=s1[i]; } bool=1; } s1[k]='\0'; }

挤压函数中的错误,用于删除字符串之间的逗号 #包括 空隙挤压(半焦*s1,半焦*s2); main() { char*s1=“字符串”; char*s2=“弹簧”; 挤压(s1,s2); printf(“%s”,s1); } 空隙挤压(字符*s1,字符*s2) { int i=0,j=0,k=0,bool=1; 对于(i=0,k=0;s1[i]!='\0';i++) { 对于(j=0;s2[j]!='\0';j++) if(s1[i]==s2[j]) { bool=0; 打破 } 如果(bool) { s1[k++]=s1[i]; } bool=1; } s1[k]='\0'; },c,C,这个程序给了我一个seg错误。我试着用gdb调试它。错误在第25行 (即)s1[k++]=s1[i] 我尝试在java中运行相同的函数。令人惊讶的是,它工作得很好。我用数组替换了指针,当循环器等于数组长度时退出循环。但是它在c上不起作用 有什么建议吗?谢谢您正在尝试修改字符串文字。字符串文字在C中是一个常量只读字符串。您不能以任何方式更改它。尝试将字符串声明为字符数组 #include<stdio.h> void squeeze(char *s1,char *s2); main()

这个程序给了我一个seg错误。我试着用gdb调试它。错误在第25行 (即)
s1[k++]=s1[i]

我尝试在java中运行相同的函数。令人惊讶的是,它工作得很好。我用数组替换了指针,当循环器等于数组长度时退出循环。但是它在c上不起作用
有什么建议吗?谢谢

您正在尝试修改字符串文字。字符串文字在C中是一个常量只读字符串。您不能以任何方式更改它。尝试将字符串声明为字符数组

#include<stdio.h>
void squeeze(char *s1,char *s2);

main()
{
    char *s1="string";
    char *s2="spring";
    squeeze(s1,s2);
    printf("%s",s1);
}

void squeeze(char *s1,char *s2)
{
    int i=0,j=0,k=0,bool=1;
    for(i=0,k=0;s1[i]!='\0';i++)
    {
      for(j=0;s2[j]!='\0';j++)
        if(s1[i]==s2[j])
        {
           bool=0;
           break;
        }
     if(bool)
     {
         s1[k++]=s1[i];
     }
     bool=1;
    }
    s1[k]='\0';
}

这段代码是一个很好的例子,说明了为什么
i
j
k
是错误的变量名。很难说出这里是什么
bool
是一个特别糟糕的变量名,因为它只传达变量的类型,而不是其用途。谢谢,我会记住这一点!这很有效。我认为char s1[]和char*s1是相似的。两者都创建指向数组的指针。否。检查此链接:相似,是,相同否。它们都创建指向数组的指针,但
char*xyzy=“plugh”
创建指向不允许修改的数组的指针
char xyzy[]=“plugh”
创建一个可以修改的新数组,然后给你一个指向它的指针。如果我对声明使用volatile修饰符,会发生什么?“volatile”不会改变结果。您遇到seg故障是因为您正在访问不应该访问的内存,或者以不应该访问的方式访问内存。”volatile’关键字主要用于避免编译器优化。这与你的问题毫无关系。
char s1[] = "string";
char s2[] = "spring";