2014-01-11 44 views
-1

我想從函數返回一個字符串(在示例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; 
} 
+1

你甚至嘗試過搜索嗎? –

+1

如果你不理解它,你應該繼續搜索你不瞭解的每件作品,並學會將它應用於你的問題。 Stackoverflow並不是要爲你做你的工作。 –

回答

5

字符串是可變長度的存儲器的塊,和C不能返回這樣的對象(至少不是不中斷與該假定字符串不能被返回代碼兼容性)

可以將指針返回到串,在這種情況下,你有兩個選擇:

選項1動態函數內創建的字符串:

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

在這種情況下,接收函數生成的字符串是respo無法釋放用於構建它的內存。不這樣做會導致程序中的內存泄漏。

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()結果的變量是不是一個字符數組,但是指向一個字符數組。

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; 
} 
+1

而在主? –

+1

不要忘了'免費'。 – Nabla

+0

@user;什麼?更加詳細一些。 – haccks

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; 
} 
+0

不錯:)我想過。 +1 – haccks

+0

@haccks謝謝。 – BLUEPIXY

+2

爲什麼'if(strlen(string)> = 10)return「」;'? –