C 控制变量的位置对回路体的影响

C 控制变量的位置对回路体的影响,c,string,C,String,错误 #包括 #包括 内部主(空) { char*str=“世界各地”; 字符删除空间[256]=“\0”; printf(“%s\n”,str); 对于(大小i=0;str[i]!='\0';++i) { 尺寸j=0; 如果(str[i]!='') { delu空间[j]=str[i]; ++j; } } printf(“%s”,del_空格); 返回0; } 正确的 #include<stdio.h> #include<string.h> int main(voi

错误

#包括
#包括
内部主(空)
{
char*str=“世界各地”;
字符删除空间[256]=“\0”;
printf(“%s\n”,str);
对于(大小i=0;str[i]!='\0';++i)
{
尺寸j=0;
如果(str[i]!='')
{
delu空间[j]=str[i];
++j;
}
}
printf(“%s”,del_空格);
返回0;
}
正确的

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

int main(void)
{
    char *str = " H  el l  o, Wor   ld   ";
    char del_space[256] = "\0";
    printf("%s\n",str);
    for (size_t i = 0;str[i] != '\0';++i)
    {
        size_t j = 0;
        if (str[i] != ' ')
        {
            del_space[j] = str[i];
            ++j;
        }
    }
    printf("%s",del_space);
    return 0;
}
#包括
#包括
内部主(空)
{
char*str=“世界各地”;
字符删除空间[256]=“\0”;
printf(“%s\n”,str);
对于(大小i=0,j=0;str[i]!='\0';++i)
{
如果(str[i]!='')
{
delu空间[j]=str[i];
++j;
}
}
printf(“%s”,del_空格);
返回0;
}

为什么第一条路错了,第二条路对了?我只是移动了一个控制变量的位置,但是第一种方法中del_空间的值是错误的?我使用的编译器是GCC8.2.3。这有什么特殊原因吗?

第一个编译器每次通过循环设置
j=0
。第二个只设置
j=0
,这是第一次通过循环。

因为,在第一个示例中,
j
在每次循环迭代时被重置为零,所以所有非空格字符都将放入
delu空格[0]
(即
j++
实际上是一个无操作)。最后一个字符串将只有一个非空格字符[如果
str
有任何非空格字符]。反之亦然。@TheDark true。现已修复:-)
#include<stdio.h>
#include<string.h>

int main(void)
{
    char *str = " H  el l  o, Wor   ld   ";
    char del_space[256] = "\0";
    printf("%s\n",str);
    for (size_t i = 0,j = 0;str[i] != '\0';++i)
    {
        if (str[i] != ' ')
        {
            del_space[j] = str[i];
            ++j;
        }
    }
    printf("%s",del_space);
    return 0;
}