【问题标题】:returning a value from void function in C从C中的void函数返回一个值
【发布时间】:2021-04-02 05:46:49
【问题描述】:

我有一些代码块指定从主程序中获取一个数字并将其转换为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,字符串是

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

【问题讨论】:

  • 创建一个全局变量?
  • 只允许使用指针,因为它是基于指针的硬件
  • 当数字 > 255 时你期望会发生什么?
  • 我尝试使用 sprintf 并得到一个违规错误:“sprintf_s(arr, "%d", number);"
  • 因为它是基于指针的硬件 如果这真的是在基于指针的硬件上,它不会有scanf_s(),它只能有效且不可移植地实现微软在 Windows 上。提示:无论 MSVC 如何抱怨,都不要使用scanf_s(),因为它在骗你。

标签: c function pointers function-pointers


【解决方案1】:

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

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

您想要做的是将数字写入字符串。您可以使用来自&lt;stdio.h&gt; 的函数sprintf 来做到这一点:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      分配“*result = number;”将字符数组 (arr[0]) 中的第一个字符设置为数字中存在的值,array[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);
          }
      

      【讨论】:

        猜你喜欢
        • 2016-08-28
        • 1970-01-01
        • 2023-01-28
        • 2011-03-26
        • 2017-07-13
        • 2010-12-14
        • 2021-06-06
        • 2014-08-16
        • 1970-01-01
        相关资源
        最近更新 更多