dhanarajappu456 Ответов: 2

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


я написал программу, которая возвращает строку.мой тип возвращаемого значения был шар??

и я не получаю никакого результата для прогарама .есть ли кто-нибудь, кто может помочь мне сделать это...каким должен быть тип retuen программы, если она возвращает строку символов


Что я уже пробовал:

я пытался вернуть строку с типом char...но я знаю, что это неправильно.каков правильный тип программы ??

2 Ответов

Рейтинг:
5

KarstenK

В лучшем случае вы возвращаете какой-то строковый объект, например std:строка.

Другое решение-вернуть символ*, но у него есть некоторые проблемы, такие как
а) выделенная вами строка должна быть освобождена в другом месте или в вашем
б) вводятся в буфер из области действия функции и должны быть сделать копию.

char *getStringA()
{
  char * p = new char[12];
  strcyp( p, "hello world");
  return p;
}
char *getStringB()
{
  char p[12];
  strcyp( p, "hello world");
  return p;
}
   //call A
   char *resultA = getStringA();
  // usage
  //cleanup
  delete resultA;
  //call B
   char *resultB = getStringB();
   char buffer[12];// must be big enough
   strcyp( buffer, resultB(
  // usage
  // no cleanup!!!


dhanarajappu456

спасибо

Рейтинг:
12

Jochen Arndt

Общий метод заключается в выделении памяти для строки с помощью malloc() и возвращая а char* указатель на эту выделенную память. Затем вызывающая функция отвечает за освобождение памяти:

char *SomeFunc()
{
    // Determine required size and allocate
    // Don't forget to add one for the terminating NULL char
    char *buf = (char *)malloc(requiredSize);
    // Write to buf here ensuring that requiredSize is not exceeded

    // Calling function must free the memory
    return buf;
}

В некоторых случаях вы также можете использовать static char[] буфер. Затем вернуть const char* к этому буферу. Но вы должны знать о возможных проблемах ведьмы таких функций (фиксированный размер, не потокобезопасный).
const char *SomeFunc()
{
    static char buf[SOME_FUNC_STATIC_BUF_SIZE] = "";
    // Write to buf here ensuring that SOME_FUNC_STATIC_BUF_SIZE is not exceeded
    return buf;
}

Другим решением является передача буфера и его размера в качестве аргументов:
char *SomeFunc(char *buf, size_t size)
{
    // Write to buf here ensuring that size is not exceeded
    return buf;
}

В случае C++ используйте строковый тип C++, например std::string вместо этого и верните это. Тогда вам не нужно заботиться об освобождении памяти:
std::string SomeFunc()
{
    std::string buf;
    // Assign to buf here
    return buf;
}


dhanarajappu456

спасибо