删除空格函数无法起到作用

问题遇到的现象和发生背景

关于一个函数进入循环后无法出来

问题相关代码,请勿粘贴截图

#include
#include
#include
#include
void fun (char *str)
{
int t,i;

for(t=0;str[t]!='\0';)
{
    if(str[t]==' ')  
    {
        for(i=t;str[i]!='/0';i++)   
            str[i]=str[i+1];
    }
    if(str[t]!=' ')
        t++;
}

}
void main()
{
char str[81];
char Msg[]="Input a string:";
int n;
FILE out;
printf(Msg);
gets(str);
puts(str);
fun(str);
printf("
** str: %s\n",str);
//
out=fopen("out.dat","w");
fun(Msg);
fprintf(out,"%s",Msg);
fclose(out);
/
/
}

运行结果及报错内容

期望达到以下效果

img

img

str[i]!='/0'
改为
str[i]!='\0'
你写成'/0',找不到这个字符,就死循环了


void fun (char *str)
{
    int t,i;

    for(t=0;str[i]!='\0';t++)
    {
            if(str[t]==' ')  
            {
                    str[i]=str[i+1];
         }
         if(str[t]!=' ')
            t++;
    }    
}

函数改成这样,看能不能用

把fun函数里面的for循环判断字符串结束那里改一下就可以了,str[i]!='/0';改为str[i]!='\0'; 因为空字符串是'\0'。修改如下:

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
void fun (char *str)
{
    int t,i;

    for(t=0;str[t]!='\0';)
    {
        if(str[t]==' ')  
        {
            for(i=t;str[i]!='\0';i++)   
                str[i]=str[i+1];
            
        }
        if(str[t]!=' ')
            t++;
    }
}
int  main()
{
    char str[81];
    char Msg[]="Input a string:";
    int n;
    FILE * out;
    printf(Msg);
    gets(str);
    puts(str);
    
    fun(str);
    printf("** str: %s\n",str);
    //
    out=fopen("out.dat","w");
    fun(Msg);
    fprintf(out,"%s",Msg);
    fclose(out);
    
    return 0;
//
}

img

修改如下,供参考:

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
void fun(char* str)
{
    int t, i;

    for (t = 0, i = 0; str[t] != '\0'; t++)
    {
        if (str[t] != ' ')
        {
            str[i++] = str[t];
            //for (i = t; str[i] != '/0'; i++)
            //    str[i] = str[i + 1];
        }
        //if (str[t] != ' ')
        //t++;
    }
    str[i] = '\0';
}
void main()
{
    char str[81];
    char Msg[] = "Input a string:";
    int n;
    FILE* out;
    printf(Msg);
    gets(str);
    puts(str);
    fun(str);
    printf("** str: %s\n", str);
    //
    out = fopen("out.dat", "w");
    fun(Msg);
    fprintf(out, "%s", Msg);
    fclose(out);
    //
}


#include <stdio.h>
#pragma warning(disable:4996)
void func(char* str) {
        int i=0,j=0;
        while (str[j] != '\0') {
                if (str[j] == ' ')
                {
                        j++;
                }
                else {
                        str[i]=str[j];
                        i++;
                        j++;
                }
        }
        str[i]='\0';
        
}
int main()
{
        char ccc[]="hao da    yi  ke shu";
        func(ccc);
        printf("%s",ccc);
}