Linux中C中的分段错误(核心转储)



我正试图通过接受用户的输入来运行此程序,但我遇到了分段错误(核心转储(错误。有人能帮我找出这个错误发生的原因吗?我该如何修复这个错误?我的代码如下:

// C program to remove the occurrences of a specific char from the given string.
#include <stdio.h>
char *squeeze(char *a[], int b){
int i,j;
for(i=j=0; *(*a+i)='';i++){
if(*(*a+i)!=b)
*(*a+j++)=*(*a+i);
}
*(*a+j)='';
return *a;
}
void main(){
char *c[1];
char d[2];
int e;
printf("Enter the string: ");
scanf("%s",*c);
printf("Enter the character to delete: ");
scanf("%c",d);
e=d[0];
printf("Resulting string is:%s.n",squeeze(c,e));
}

您的代码中有一些问题。首先,正如评论中所指出的,您将c声明为char *长度为1的数组是错误的。将其声明为char数组或某个最大长度。这将使压缩代码更简单,减少引用。接下来,当你真的想检查不等式时,挤压内部的for循环是错误的,你在中间有一个赋值语句。您的第二个scanf需要一个空间来清除输入缓冲区中剩余的空白字符。因此,进行这些更改后,您的代码应该如下所示:

#include <stdio.h>
char *squeeze(char *a, int b){
int i,j;
for(i=j=0; *(a+i) != '';i++){
if(*(a+i)!=b)
*(a+j++)=*(a+i);
}
*(a+j)='';
return a;
}
int main() {
char c[100] = {0};
char d[2];
int e;
printf("Enter the string: ");
scanf("%99s",c);
printf("Enter the character to delete: ");
scanf(" %c",d);
e=d[0];
printf("Resulting string is: %s.n",squeeze(c,e));
}

编辑:c中读取时使用scanf指定字符串长度。

// C program to remove the occurrences of a specific char from the given string.
#include<stdio.h>
char * squeeze(char a[], char b){
for(i=0; a[i]!='';i++){
if(a[i]==b){
a[i]=a[i+1];
while(a[i++]!=''){
a[i]=a[i+1];
}
}
}
return a;
}
int main(){
char c[50];
char d;
printf("Enter the string:");
scanf("%s",c);
printf("Enter the character to delete:");//add n 
scanf(" %c",&d);

printf("Resulting string is:%sn",squeeze(c,d));
return 0;
}

相关内容

  • 没有找到相关文章

最新更新