我想从函数(在示例 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;
}
答案 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;
}