Сомневаюсь с функцией и указателем в C

Доброе утро.

Я изучаю C с книгой, но выходит следующее упражнение, в котором я попытался использовать * для функционирования char *str_copy, изменив его на str_copy, ничего более. Однако, при попытке использовать его внутри printf, компилятор выдает мне ошибку.

Может кто-нибудь объяснить мне, почему ошибка? Я полностью понимаю, что возвращаемое значение - это указатель t, который будет указывать на строку, уже скопированную с псевдонимом A.

#include <stdio.h>

char *str_copy(char *s, const char *p){

    char *t = s;
    while (*s++ = *p++){

    }

    return t;
}

int main(){

    char a[128] = "ABC";
    char b[128];
    puts("Ingrese las letras de b");
    scanf("%s", b);

    printf("A es %s\n", str_copy(a,b));

}
0
задан 16.01.2017, 14:38
0 ответов
char *str_copy(char *s, const char *p);

char a[128] = "ABC";
char b[128];
printf("A es %s\n", str_copy(a,b));

Функция str_copy стремись к тому, чтобы скопировать контент b в a и ты надеешься, что он это делает наоборот.

Правильное в твоем случае состояло бы в том, чтобы помещать:

printf("A es %s\n", str_copy(b,a));

Относительно которого ты комментируешь стоимости возврата... тип char он ссылается только на свободный характер, в то время как char* он используется для цепей символов.

Если ты пробуешь что-то такое что:

char str_copy(char *s, const char *p){

    char *t = s;
    while (*s++ = *p++){

    }

    return t;
}

Оно не будет функционировать потому что t он типа char*, в то время как стоимость возврата функции char. Да, который ты смог бы делать, взамен:

char str_copy(char *s, const char *p){

    char *t = s;
    while (*s++ = *p++){

    }

    return *t;
}

Но тогда единственной, что будет возвращать тебе функцию, является копия первого символа цепи... конечно, этот символ ты не мог бы использовать это с аргументом %s в printf, но ты был бы должен использовать %c:

printf("El primer cacater de B es %c\n", str_copy(b,a));
4
ответ дан 03.12.2019, 17:40