从 C 中的 void 函数返回一个值

时间:2020-12-23 15:49:06

标签: c function pointers function-pointers

我有一些代码块指定从主程序获取一个数字并将其转换为 char * 当我想在主程序中而不是在函数中打印它时,问题就开始了。

这是我目前尝试过的:

#include <stdio.h>

void help(int number, char* result);
int main()
{
    char arr[100] = "";
    int number;
    printf("enter number: ");
    scanf_s("%d", &number);
    help(number, &arr);
    printf("number is %d and string is %s\n", number, &arr);
    return 0;
}

void help(int number, char* result)
{
    *result = number;
}

结果结果:

<块引用>

数字是 15,字符串是

我尝试了许多不同的方法和变化,但仍然没有运气。建议?

3 个答案:

答案 0 :(得分:1)

arr 已经指向数组第一个元素的地址,所以你应该去掉它前面的 & 符号。

在您的函数中,您实际上是将 number 分配给数组的第一个字符。这与写 arr[0] = number; 相同。例如,如果 number 的值为 65,您的代码将打印一个大写的 A,因为它是 ASCII 表中的相应字符。

您想要做的是将数字写入字符串。您可以使用 sprintf 中的函数 <stdio.h> 来实现:

void help(int number, char *result) {
    sprintf(result, "%d", number);
}

第一个参数是您“打印”到的字符串,第二个参数指定您实际写入的内容,语法是普通 printf 的语法。

答案 1 :(得分:0)

将帮助功能更改为: *result = number; -> sprintf(result, "%d", number);

答案 2 :(得分:0)

赋值“*result = number;”将字符数组 (arr[0]) 中的第一个字符设置为 number 中存在的值,数组 [0] 可以容纳的最大值为 256 (-128to128)。 “*结果=数字;”这不会将数字转换为字符数组或字符串。

创建字符数组或字符串 snprintf 很有用。

    int a = 12;
    char arr[128] = {0};
    snprintf(arr, 128, "%d", a);
    printf("%s \n", arr);

可以修改函数以包含此内容。

    void help(int number, char* result, int result_size)
    {
          snprintf(result, result_size, "%d", number);
    }
相关问题