2011-04-30 76 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