Arrays 从字符串中删除指定字符的程序-空格会导致断言失败

Arrays 从字符串中删除指定字符的程序-空格会导致断言失败,arrays,c,char,Arrays,C,Char,我正在尝试从字符串中删除给定的字符,并且我的代码大部分都正常工作,但是当我指定“”作为字符串,指定“”作为字符时,断言失败 #include <stdio.h> #include <string.h> #include <assert.h> void strrem(const char* s1, const char c, char* s2); int main(void) { char str[1000]; strrem("ab

我正在尝试从字符串中删除给定的字符,并且我的代码大部分都正常工作,但是当我指定“”作为字符串,指定“”作为字符时,断言失败

#include <stdio.h>
#include <string.h>
#include <assert.h>

void strrem(const char* s1, const char c, char* s2);

int main(void)
{

   char str[1000];

   strrem("abc", 'b', str); assert(strcmp(str,"ac")==0);
   strrem("ABC", 'a', str); assert(strcmp(str,"ABC")==0);
   strrem("Hello World!", '!', str); assert(strcmp(str,"Hello World")==0);
   strrem("", ' ', str); assert(strcmp(str,"")==0);

   return 0;
}

void strrem(const char* s1, const char c, char* s2)
{
   int i, j;
   int strlngth = strlen(s1);


   for (i = 0, j = 0; i < strlngth; i++) {
      if(s1[i] != c) {
         s2[j++] = s1[i];
      }


      s2[j] = '\0';
   }
}
#包括
#包括
#包括
void strem(常量字符*s1,常量字符c,字符*s2);
内部主(空)
{
char-str[1000];
strem(“abc”,“b”,str);assert(strcmp(str,“ac”)==0);
strem(“ABC”,“a”,str);assert(strcmp(str,“ABC”)==0);
strem(“helloworld!”,“!”,str);assert(strcmp(str,“helloworld”)==0);
strem(“,”,str);assert(strcmp(str,”)==0);
返回0;
}
void strem(常量字符*s1,常量字符c,字符*s2)
{
int i,j;
int strlength=strlen(s1);
对于(i=0,j=0;i
不要每次循环都不断分配空字节,然后覆盖它,只需在循环后分配它,这也解决了您的问题(当代码从不循环时不分配空字节):

#包括
#包括
#包括
void strem(常量字符*s1,常量字符c,字符*s2);
内部主(空)
{
char-str[1000];
strem(“abc”,“b”,str);assert(strcmp(str,“ac”)==0);
strem(“ABC”,“a”,str);assert(strcmp(str,“ABC”)==0);
strem(“helloworld!”,“!”,str);assert(strcmp(str,“helloworld”)==0);
strem(“,”,str);assert(strcmp(str,”)==0);
返回0;
}
void strem(常量字符*s1,常量字符c,字符*s2)
{
int i,j;
int strlength=strlen(s1);
对于(i=0,j=0;i
不要每次循环都不断分配空字节,然后覆盖它,只需在循环后分配它,这也解决了您的问题(当代码从不循环时不分配空字节):

#包括
#包括
#包括
void strem(常量字符*s1,常量字符c,字符*s2);
内部主(空)
{
char-str[1000];
strem(“abc”,“b”,str);assert(strcmp(str,“ac”)==0);
strem(“ABC”,“a”,str);assert(strcmp(str,“ABC”)==0);
strem(“helloworld!”,“!”,str);assert(strcmp(str,“helloworld”)==0);
strem(“,”,str);assert(strcmp(str,”)==0);
返回0;
}
void strem(常量字符*s1,常量字符c,字符*s2)
{
int i,j;
int strlength=strlen(s1);
对于(i=0,j=0;i
这太简单了,令人沮丧。谢谢你的回答,这是令人沮丧的简单。谢谢你的回答