【问题标题】:C++ can't return variableC++ 不能返回变量
【发布时间】:2011-08-14 02:10:39
【问题描述】:

大家好!这段代码总是返回 0,即使 errcheck 有一个非零值。如果我使用 return 1;它按预期工作。请帮忙?

   int errcheck = system(docommand.c_str());
    if (errcheck != 0)
    {
        cerr << "Could not retrieve tarball!" << " Errcheck status (debug): " << errcheck << endl;
        return errcheck;
    }

这里是完整的代码:

#include <iostream>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{
    umask(0);
    mkdir("/tmp/.aget", 0755);
    chdir("/tmp/.aget");

    for (int i = 1; i < argc; i++)
    {

        string target(argv[i]);
        string docommand("");
        string s1("wget -q http://aur.archlinux.org/packages/");
        string s2("/");
        string s3(".tar.gz");
        docommand += s1;
        docommand += target;
        docommand += s2;
        docommand += target;
        docommand += s3;
        cout << "Downloading AUR tarball for '" << target << "'..." << endl;
        int errcheck = system(docommand.c_str());
        if (errcheck != 0)
        {
            cerr << "Could not retrieve tarball!" << " Errcheck status (debug): " << errcheck << endl;
            return errcheck;
        }
    }

    for (int i = 1; i < argc; i++)
    {
        string target(argv[i]);
        string docommand("");
        string s1("tar xf ");
        string s2(".tar.gz");
        docommand += s1;
        docommand += target;
        docommand += s2;
        cout << "Extracting '" << target << ".tar.gz'..." << endl;
        system(docommand.c_str());
    }

    for (int i = 1; i < argc; i++)
    {
        string target(argv[i]);
        string docommand("");
        chdir("/tmp/.aget");
        chdir(target.c_str());
        system("makepkg -csim --noconfirm > /dev/null");
    }

    rmdir("/tmp/.aget");

    return 0;
}

【问题讨论】:

  • 显示周边代码,这段代码所在的函数或方法的返回类型是什么?
  • 显示函数原型以及如何检查返回值。可能是符号问题。返回值限制等
  • 好的,我添加了完整的源代码。
  • 你确定它是从那里退出,而不是在最后的return 0;
  • 1) 你怎么知道调用的是return errcheck;,而不是return 0? 2)你怎么知道main返回0?

标签: c++ variables return main


【解决方案1】:

Unix 退出状态的值限制为 0-255,即无符号 8 位整数的范围。因此,您看不到 2048。

有关更多信息,请参阅Exit Status wiki 页面。

【讨论】:

  • 嗯,这解决了这个问题。谢谢!但是,为什么 C++ 看到返回状态为 2048,而 wget 实际上返回 8?
  • @lupusarcanus:因为你看的是整数。实际上,该整数具有退出状态和其他编码为位的附加信息。因此,要获得退出状态编号,您必须使用某些位,而不是全部。为此,有一个 WEXITSTATUS 宏 (chemie.fu-berlin.de/chemnet/use/info/libc/libc_23.html)。
【解决方案2】:

我怀疑 wget 总是返回 0。

这是因为来自 http 请求的实际错误状态在流中。

【讨论】:

  • Downloading AUR tarball for 'libjpeg2'... Could not retrieve tarball! Errcheck status (debug): 2048 Process returned 0 (0x0) execution time : 0.207 s Press ENTER to continue.
  • 使用 libjpeg6 完成后,成功完成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 2013-09-28
  • 1970-01-01
  • 2018-02-21
  • 2012-10-10
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多