将函数字符串返回main

时间:2014-01-11 22:38:22

标签: c string function main

我想从函数(在示例 funzione 中)返回一个字符串到main。这该怎么做?谢谢!

#include <stdio.h>
#include <string.h>

#define SIZE (10)

/* TODO*/ funzione (void)
{
    char stringFUNC[SIZE];

    strcpy (stringFUNC, "Example");

    return /* TODO*/;
}

int main()
{
    char stringMAIN[SIZE];

    /* TODO*/

    return 0;
}

[已编辑] 对于需要它的人,以前代码的完整版本(但没有 stringMAIN )是:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE (10)

char *funzione (void)
{
    char *stringa = malloc(SIZE);
    strcpy (stringa, "Example");

    return stringa;
} 

int main()
{
    char *ptr = funzione();

    printf ("%s\n", ptr);

    free (ptr);

    return 0;
}

3 个答案:

答案 0 :(得分:6)

字符串是一个可变长度的内存块,C不能返回这样的对象(至少不会破坏与假定字符串不能返回的代码的兼容性)

您可以返回指向字符串的指针,在这种情况下,您有两个选项:

选项1.在函数中动态创建字符串:

char *funzione (void)
{
    char *res = malloc (strlen("Example")+1);  /* or enough room to 
                                                  keep your string */
    strcpy (res, "Example");    
    return res;
}

在这种情况下,接收结果字符串的函数负责释放用于构建它的内存。如果不这样做,将导致程序中出现内存泄漏。

int main()
{
  char *str;

  str = funzione();
  /* do stuff with str */
  free (str);
  return 0;
}

选项2.在函数内创建一个静态字符串并将其返回。

char *funzione (void)
{
  static char str[MAXLENGTHNEEDED];

  strcpy (str, "Example");
  return str;
}

在这种情况下,您不需要释放字符串,但请注意,您将无法从程序中的不同线程调用此函数。此函数不是线程安全的。

int main()
{
  char *str;

  str = funzione();
  /* do stuff with str */
  return 0;
}

请注意,返回的对象是指向字符串的指针,因此在两个方法中,从funzione()接收结果的变量不是char数组,而是指向char数组的指针。

答案 1 :(得分:2)

你可以这样做

char *funzione (void)
{
    char *stringFUNC = malloc(SIZE);
    strcpy (stringFUNC, "Example");

    return stringFUNC;
}  

main中,将其命名为

int main()
{
    char stringMAIN[SIZE];
    char *ptr = funzione ()
    ...

    free(ptr);
    return 0;
}

答案 2 :(得分:2)

#include <stdio.h>
#include <string.h>

#define SIZE 10

const char *funzione (void){
    const char *string = "Example";

    if(strlen(string) >= SIZE)
        return "";

    return string;
}

int main(void){
    char stringMAIN[SIZE];

    strcpy(stringMAIN, funzione());

    printf("%s", stringMAIN);

    return 0;
}