【发布时间】:2018-05-02 21:06:33
【问题描述】:
所以我做了一个从字符串中删除字符的程序,它看起来像这样:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* deleteChar(char* texto,int n,char del,int i,int j)
{
/*for(i=0,j=0;i<n;i++)
if(texto[i]!=del)
{
texto[j]=texto=i;
j=+1;
}
for(n-i;n-i<n;i--)
texto[n-i]=NULL;
return(texto);*/
if(i!=n)
{
if(texto[i]!=del)
{
texto[j]=texto[i];
j+=1;
}
i+=1;
texto=deleteChar(texto,n,del,i,j);
}
else
{
i=i-j;
for(n-i;n-i<n;i--)
texto[n-i]=NULL;
return(texto);
}
}
void main()
{
char del;
printf("Remover: \n");
scanf("%c",&del);
char* texto;
texto=(char*)calloc(0,sizeof(char));
printf("Texto: \n");
scanf("%s",texto);
int n=0;
n=strlen(texto);
/*char del;
scanf("%c",&del);*/
texto=deleteChar(texto,n,del,0,0);
printf("%s ",texto);
}
关注main(),由于某种原因,如果我在得到我的字符串后scanf("%c",&del),程序会中断(甚至在得到del 输入之前),但如果我在它工作得很好之后再这样做。
我不知道为什么。
【问题讨论】:
-
calloc(0,sizeof(char));没有给你足够的空间来使用scanf("%s", texto) -
如果你把
scanf("%c",&del)放在字符串输入之后,它会占用输入缓冲区中剩余的换行符。在%c之前放置一个空格,就像scanf(" %c",&del)一样,因为与大多数格式说明符不同,%c不会自动跳过前一个输入中剩余的空格。这是最常见的 C 问题之一。 -
使用好名字而不是 i,j。此外,没有理由将 0,0 作为初始值传递,它们应该在例程中声明和初始化。