Влияние положения управляющей переменной на тело l oop - PullRequest
2 голосов
/ 05 февраля 2020

ошибка

#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;
}

правильно

#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;
}

Почему первый путь неправильный, а второй правильный? Я просто переместил позицию управляющей переменной, но значение del_space по-первому неверно? Я использую компилятор GCC8.2.3. Есть ли для этого особая причина?

1 Ответ

2 голосов
/ 05 февраля 2020

Первый устанавливает j = 0 каждый раз через l oop. Второй устанавливает j=0 только один раз - первый раз через l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...