Как вернуть строку из функции в main ()? - PullRequest
0 голосов
/ 25 августа 2018

Я пробовал следующий код, но получаю ошибку : конфликтующие типы для развлечения . Есть ли решение, которое не требует использования malloc.

#include <stdio.h>
int main()
{
printf("%s",fun());
return 0;
} 

char* fun()
{
static char str[]="Hello";
return str;
}

Ответы [ 3 ]

0 голосов
/ 25 августа 2018
char* fun()
{
    static char str[]="Hello";
    return str;
}

str содержит базовый адрес вашей строки.(Предположим, 1000).Теперь, когда вы возвращаете str , он возвращает только базовый адрес.

printf("%s",fun());

Здесь вы хотите напечатать строку, чтобы вы дали% s, но этот забавный возвращаемый базовый адрес вашего массива символов(строка), но не строка (как вы предполагаете).

Во-первых, вам нужно разыменовать ваш fun () в printf так, чтобы он давал первый символ массива строк, так как str давал базовый адрес, который указывает на первыйсимвол вашей строки.

Кроме того, вам нужно указать форматер как % c , чтобы он выдал H .

Теперь для печативсю строку, вам нужно увеличивать то, что находится внутри вашего указателя на символ.

См. ниже код:

#include <stdio.h>

char* fun();

int main()
{
    int i;
    for(i=0;i<6;i++){
        printf("%c",*(fun()+i));
    }
return 0;
} 

char* fun()
{
    static char str[]="Hello";
    return str;
}

Здесь вы можете видеть, что я разыскиваю fun () сначала для печати первого символа, а затемЯ сделал цикл for, чтобы можно было использовать переменную цикла i, чтобы увеличить то, что находится внутри указателя, возвращаемого функцией fun ().

Попробуйте и дайте мне знать, если у вас возникнут какие-либо проблемы здесь.

0 голосов
/ 25 августа 2018

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

#include <stdio.h>

struct String
{
  char body[1024];
};

struct String fun(void);

int main(void)
{
  struct String my_string = fun();
  printf("%s\n", my_string.body);

  return 0;
}

struct String fun(void)
{
  return (struct String){ .body = "Hello" };
}
0 голосов
/ 25 августа 2018

Это потому, что вы не объявили прототип для fun.

#include <stdio.h>
char* fun(void);
int main()
{
   printf("%s",fun());
   return 0;
}

char* fun(void)
{
   static char str[]="Hello";
   return str;
}
...