从函数返回一个字符串到main

Posted

技术标签:

【中文标题】从函数返回一个字符串到main【英文标题】:Return a string from function to main 【发布时间】:2014-01-30 20:53:57 【问题描述】:

我想将一个字符串从一个函数(在示例 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;

[EDITED]对于需要的人,之前代码的完整版本(但没有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;

【问题讨论】:

你试过搜索这个吗? 如果你不理解它,你应该继续搜索你不理解的每一部分,并学习将它应用到你的问题中。 *** 并不是要为您完成工作。 【参考方案1】:
#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;

【讨论】:

不错 :) 我想过。 +1 为什么是if(strlen(string)&gt;=10) return ""; @use 因为 SIZE 的预期字符再也无法容纳。按概念是否截断内容。 好的,谢谢!但是你没有分配内存,因为它是一个 const char,对吧? @user 是的,如果从函数返回字符串(如字符串文字(如const char *)时返回预设字符串作为含义,则可能是返回const char * )。【参考方案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;

【讨论】:

别忘了free @user;什么?更具体。 好的,谢谢,请原谅我的琐碎问题。 @Nabla;你说的对。但是我离开了char stringMAIN[SIZE];,因为我不确定它为什么会在那里:) strcpy(stringMAIN, ptr);【参考方案3】:

字符串是一个可变长度的内存块,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数组的指针。

【讨论】:

以上是关于从函数返回一个字符串到main的主要内容,如果未能解决你的问题,请参考以下文章

C ++:从函数、返回类型或引用中使用和返回字符数组?

简单的 C 程序。从函数返回的字符串导致错误

c语言中在main函数之前会执行啥?

从 main 调用带有返回变量的方法

字符串不返回主函数

java的main函数为什么没有返回值