2011-04-30 75 views
1

如何從函數返回一個字符串的函數:如何編寫會返回一個字符串在C

char * temp; 

int main() 
{ 
    temp = malloc(129); 

    double g_symbol_b_amount = 8536.700000; 
    printf("\n value: %s\t ", format_double_trans_amount(double g_symbol_b_amount)); 
} 

char *format_double_trans_amount(double amount) 
{ 
    char amount_array_n1[25]; 
    strcpy(amount_array_n, ""); 
    sprintf(amount_array_n, "%1f", amount); 
    temp = amount_array_n; 
    return temp; 
} 

這裏我得到的值:0.000000
我需要的原單值,請幫我這個?

+0

什麼是'amount_array_n'?這是爲你編譯的嗎?你能顯示生成的確切輸出嗎? – 2011-04-30 15:23:49

+0

char amount_array_n1 [25]; – jcrshankar 2011-04-30 15:32:43

+1

修復了格式。 – 2011-04-30 15:36:50

回答

1

我測試過下面的代碼並正確行爲。你能確認嗎?

#include "stdio.h" 
#include "stdlib.h" 

char * temp; 

char *format_double_trans_amount(double amount) 
{ 
    sprintf(temp,"%1f",amount); 
    return temp; 
} 

int main() 
{ 
    double g_symbol_b_amount = 8536.700000; 
    temp = (char*) malloc(sizeof(char) * 129); 
    printf("\n value: %s\n", format_double_trans_amount(g_symbol_b_amount)); 
    free(temp); 
} 
+0

不,bacchus ..它不適合我。 – jcrshankar 2011-04-30 15:51:13

+0

@jcrshankar你有什麼錯誤嗎? – bacchus 2011-04-30 15:57:53

+0

@jcrshankar您使用什麼環境編譯/測試示例?我已經使用Linux和gcc進行了測試,並且該值已正確打印! – bacchus 2011-04-30 15:59:00

1

printf()格式字符串應該有%s而不是%f因爲傳遞的值(從format_double_trans_amount返回的值)是一個char *而不是double

我想你也應該改變你的format_double_trans_amount()功能:

char *format_double_trans_amount(double amount) 
{  
    sprintf(temp,"%1f",amount); 
    return temp; 
} 
+0

除了'format_double_trans_amount'中的'amount_array_n'不存在之外,哪一個都很好。我懷疑他不明白整個堆棧和堆的東西要麼;) – 2011-04-30 15:26:29

+0

@Brian:根據OP,他的代碼正在運行,所以它必須存在,無論我們知道在哪裏。但是,我已經修改了我的答案,指出它不是必需的。 – 2011-04-30 15:27:57

+0

因爲'temp'是全局的,所以都不會從'format_double_trans_amount'返回任何東西。忽略你指出的第一個問題當然重要,他的問題是問你如何從函數返回一個「字符串」。 – 2011-04-30 15:32:26

相關問題