Разница между функцией VOID со строковым аргументом и функцией со строковым аргументом, которая возвращает массив символов? - PullRequest
0 голосов
/ 10 января 2020

Мой вопрос: в чем разница между функцией, которая возвращает массив символов, и функцией, которая является просто void? Насколько я понимаю, если вы передадите строку в качестве аргумента, то эту строку можно будет изменить внутри функции без необходимости возвращать новый массив символов

, например,

char * my_strcat(char *word, char *appending)
{
    int len = strlen(word);
    for (char *letter = appending; *letter != '\0'; letter++)
        word[len++] = *letter;

    word[len] = '\0';

    return word;
}

void my_strcat(char *word, char *appending)
{
    int len = strlen(word);
    for (char *letter = appending; *letter != '\0'; letter++)
        word[len++] = *letter;

    word[len] = '\0';
}

Я проверил оба, и они оба работают. Почему я должен использовать один над другим?

Спасибо

1 Ответ

3 голосов
/ 10 января 2020

Возвращение исходного указателя обеспечивает возможность более удобного вложения вызовов функций:

printf("%s\n", my_strcat(name, lastName));

В отличие от:

my_strcat(name, lastName);
printf("%s\n", name);

Версия, возвращающая char*, позволяет использовать любой из Вышеуказанные стили.

Кроме того, ваша реализация ненадежно завершает строку нулевым символом. Вы выходите из своего for l oop, когда вы сталкиваетесь с \0. Вы все еще хотите добавить это.

Вместо этого:

for (char *letter = appending; *letter != '\0'; letter++)
    word[len++] = *letter;

Это:

for (char *letter = appending; *letter != '\0'; letter++)
{
    word[len++] = *letter;
}
word[len] = '\0';

Это также будет работать (используйте побочный эффект от назначения как выражение оценки для al oop).

while (word[len] = *appending)
{
   appending++;
   len++;
}

Как я уже упоминал в своем комментарии ниже, я не большой поклонник использования операторов присваивания в качестве условия. Я предпочитаю стиль, который у тебя есть.

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