【问题标题】:How come if condition not work?如果条件不起作用怎么办?
【发布时间】:2014-03-02 03:16:30
【问题描述】:
           rc = daoMp.retrieveSystemData(argv[2]);
           printf("rc = %d\n");
           if (rc == 0) {
               ErrLog("Mount point found\n");
               printf("Mount point found\n");
               return 4;
           }
           else {
               ErrLog("Could not retrieve system data\n");
               printf("Could not retrieve system data\n");
               return -1;
           }

Output: rc = -208814497
Mount point found

如果区块验证失败怎么办?

【问题讨论】:

  • 看看你的第一个 printf。更仔细。
  • 你已经引发了未定义行为,最好避免使用蹩脚的、类型不安全的 C 风格调用。
  • 对不起,我不明白。代码的其他部分使用if (rc < 0) 之类的东西,我也遵循了同样的方法。我在这里想念什么?有人可以帮我吗?
  • 看看答案。 rc 等于 0 但你不打印 rc,你打印的是垃圾(-208814497)
  • 您使用 C++ 编写,但这段代码读起来像 C。答案很简单:don't write like it were C。对于新手来说,C 风格更容易出错,对于没有经验的人,我强烈反对。

标签: c++ linux gcc


【解决方案1】:

而不是这个(你调用不正确,一个参数太短了):

printf("rc = %d\n");

这样做:

std::cout << "rc = " << rc << '\n';

这样,您将使用正确的 C++ 方式来执行此操作(这会立即告诉您有什么不对劲)。 printf() 是从 C 继承而来的,它本质上是不安全的 - 你的错误是 why.

的一个典型例子

【讨论】:

  • 但是 C++ 是 C 的超集,我想知道为什么它不起作用。请问有什么提示吗?
  • @kingsmasher1 1. C++ 不是 C 的超集。 2. 正如我在答案中所说,你调用 printf() 时参数太短 - 你实际上并没有通过rc 进入函数。
【解决方案2】:

我相信您缺少 printf 的第二个参数:

printf("rc = %d\n", rc);

【讨论】:

    【解决方案3】:

    printf("rc = %d\n"); 应该是printf("rc = %d\n", rc);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 2018-01-20
      相关资源
      最近更新 更多