2014-01-30 30 views
0

我是C的初學者,而且我比較笨,所以我希望有人能幫忙。如何從C函數中的每個調用返回不同的字符串?

我有一個方法返回一個字符串取決於某個數字是什麼。

char* getStr(int aNumber) 
{ 
    char *str= malloc(15); 
    if(!str) 
     return NULL; 
    if(aNumber == 0) 
     str = "this"; 
    else if(aNumber== 1) 
     str = "that"; 
    // other "else if" statements 
    else 
     str= "nope"; 
return str; 
} 

在另一種方法我:現在

char *myString = getStr(number1); 
    printf("%s", myString); 
char *myOtherString = getStr(number2) 
    printf("%s", myOtherString); 

我的問題是myOtherString相同的myString。在getStr()方法而不是malloc()中使用strdup()時,同樣也會出現同樣的效果,只是試圖返回str而不會導致隨機符號被打印出來(diamons和問號)。

如何更改getStr()方法以允許每次調用該方法時輸出字符串都不相同?或者我必須以某種方式釋放分配給字符串的空間,然後在另一個方法中調用它?

+0

'number1'和'number2'的值是多少?你回來的字符串是什麼? – jramirez

+0

在這種情況下,對malloc的調用是無關緊要的,因爲您將指針更改爲通過if-else語句發生的任何靜態字符串(str =「that」將str更改爲指向包含「 ,它不會將「that」分配給已經指向的空間str)。此外,即使看起來你正在嘗試返回str,你也會返回reg。 – IllusiveBrian

+0

爲什麼'返回reg;'?什麼是'reg'? –

回答

2

也許你會喜歡的是:

char* getStr(int aNumber) 
{ 
    char *str= malloc(15); 
    if(!str) 
     return NULL; 
    if(aNumber == 0) 
     strcpy(str,"this"); 
    else if(aNumber== 1) 
     strcpy(str, "that"); 
    // other "else if" statements 
    else 
     strcpy(str, "nope"); 
return str; 
} 

不是嗎?

0

C字符串不是基本類型。它們是指向角色的指針。

也許您的函數的註釋版本將有所幫助。

char* getStr(int aNumber) 
{ 
    /* make str point to a new block of uninitialized memory */ 
    char *str= malloc(15); 
    if(!str) 
     return NULL; 


    /* make str point to some other constant array, do not free original allocation */ 
    if(aNumber == 0) 
     str = "this"; 
    else if(aNumber== 1) 
     str = "that"; 
    // other "else if" statements 
    else 
     str= "nope"; 


    return reg; 
} 
+0

這幫助我瞭解了malloc()的功能,謝謝。 – Baldeep

0

您可以使用這樣的事情:

#define STRLEN 15 
char* getStr(int aNumber) 
{ 
    char *str= malloc(STRLEN); 
    if(!str) 
     return NULL; 
    if(aNumber == 0) 
     snprintf(str, STRLEN, "this"); 
    else if(aNumber== 1) 
     str = snprintf(str, STRLEN, "that"); 
    // other "else if" statements 
    else 
     snprintf(str, STRLEN, "nope"); 

    return str; 
} 
0

我想我是否應該簡單地返回字面的地址。

char* getStr(int aNumber){ 
    if(aNumber == 0) 
     return "this"; 
    else if(aNumber == 1) 
     return "that"; 
    return "nope"; 
} 

const char*爲了強調返回值不能改變。

如果你想改變你已經回來了, 你必須在這種情況下被釋放,調用者必須按順序使用由malloc保護的區域複製strcpy組的字符串。

但可能你不會改變字符串。

相關問題