【问题标题】:String variable assignment gives pointer error字符串变量赋值给出指针错误
【发布时间】:2020-04-08 20:04:41
【问题描述】:
string reading_lev(int a, int b, int c)
{
    float L = (a / b) * 100;
    float S = (c / b) * 100;
    float index = 0.0588 * L - 0.296 * S - 15.8;
    if (round(index) <= 16 && round(index) >= 1)
    {
        string val = printf("Grade %f", index);
    }
    else if (round(index) > 16)
    {
        string val = printf("Grade 16+");
    }
    else
    {
        string val = printf("Before Grade 1");
    }
    return val
}

错误出现在第一个 if 块中。涉及到 cs50 库。

错误:使用“int”类型的表达式初始化“string”(又名“char *”)的不兼容整数到指针转换 [-Werror,-Wint-conversion]

【问题讨论】:

  • string val = printf(...)? printf返回一个int,你需要分配空间然后使用snprintf返回一个字符串。
  • val 只存在于右大括号} 之前,因此return 也应该会产生错误。
  • @user3386109 并且在返回语句中也缺少 ;

标签: c cs50


【解决方案1】:

错误信息一目了然。

printf() 返回一个int,您不能将它分配给char* 类型的变量。

也就是说,您还有多个其他问题:

  • return 语句使用了一个超出其范围的块范围变量。
  • return 语句缺少 ; - 语法错误。

要修复代码,您需要做的是:

  • 分配足够长的缓冲区以保存最终输出。 (定义一个指针并使用足够大小的malloc() 或系列使用分配的内存)
  • 使用sprintf() 将您需要的输出填充到内存中。
  • 返回指针。
  • 使用完毕后,free() 返回的指针。

【讨论】:

  • 如果这真的很基本,我很抱歉,但我是新手。 printf() 如何返回一个 int?不是所有的东西都在“”里吗?
  • @KushagraSharma 阅读链接的手册页。 printf 打印的内容和返回的内容不一样。
  • @kaylum 已更新。
  • @KushagraSharma 作为 C 程序员,您需要做的第一件事就是找到文档。在 unix 系统上,您可以打开终端窗口并键入 man 3 printf 以获取 printf 的文档。在 Windows 上,可通过搜索 msdn printf 在线查看文档。您可能还想投资good reference book
  • @user3386109 我住的地方是凌晨 2 点 X(你能简单地告诉我如何修复我的代码吗?这对我很有帮助。
【解决方案2】:

您可以使用 sprintf 将格式化的数据保存为字符串。请注意,您需要一个足够大的缓冲区来保存字符串。

http://www.cplusplus.com/reference/cstdio/sprintf/

【讨论】:

  • 凌晨 2 点,我住的地方 X(你能简单地告诉我如何修复我的代码吗?这对我很有帮助。
猜你喜欢
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2021-05-22
  • 2020-07-27
  • 2018-05-06
  • 2013-05-16
  • 2011-10-10
相关资源
最近更新 更多