gpt4 book ai didi

c++ - 简单的 C++ 函数包含失败

转载 作者:行者123 更新时间:2023-11-28 07:32:48 25 4
gpt4 key购买 nike

我正在尝试将来自另一个文件的函数包含在“主”文件中。我遵循这个范例:

http://www.learncpp.com/cpp-tutorial/18-programs-with-multiple-files/

这是我的主文件,digispark.cpp:

#include <iostream>

using namespace std;

int send(int argc, char **argv);

int main()
{
char* on;
*on = '1';
char* off;
*off = '0';
send(1,&on);
return 0;
}

这是我的 send.cpp:

#include <stdio.h>
#include <iostream>
#include <string.h>
#if defined WIN
#include <lusb0_usb.h> // this is libusb, see http://libusb.sourceforge.net/
#else
#include <usb.h> // this is libusb, see http://libusb.sourceforge.net/
#endif

// I've simplified the contents of send for my debugging and your aid, but the
// complicated arguments are a part of the function that will eventually need
// to be here.
int send (int argc, char **argv)
{

std::cout << "Hello";
return 0;
}

我正在使用 g++ 编译器在 Ubuntu 12.10 上编译,如下所示:

g++ digispark.cpp send.cpp -o digispark

编译成功

但是,当我运行该程序时,“Hello”并没有出现。因此,我根本不相信该函数正在被调用。我究竟做错了什么?任何帮助都会很棒!谢谢!

编辑:

我是如何处理这个问题的:

int send(int argc, char **argv);

int main()
{
char* on[4];
on[0] = (char*)"send";
on[1] = (char*)"1";
char* off[4];
off[0] = (char*)"send";
off[1] = (char*)"0";
send(2,on);
return 0;
}

对于那些对我为什么坚持这样做感到困惑的人,正如我之前所说,发送函数已经构建为接受 char** argv(或 char* argv[])。我的意思是尝试在我的主要功能中模仿它。

重写实际进入发送函数的函数以采用不同类型的参数比仅仅发送它想要的参数要困难得多。谢谢大家!

因此,如果这对尝试类似事情的任何人有帮助,请随时使用它!

最佳答案

您的问题不是您认为的那样。它在这里:

char* on;
*on = '1';

您声明了一个 char 指针,但没有对其进行初始化。然后你取消引用它。砰,你死定了。这就是所谓的未定义行为。一旦调用 U.B.,任何事情都可能发生。如果你幸运的话,那就是崩溃。但我猜你这次不走运。

看,如果你想开始在内存中存储东西,你必须先分配那 block 内存。正如 hetepeperfan 所说,最好的方法是只使用 std::string 并让该类为您处理所有分配/取消分配。但是如果出于某种原因你认为你必须使用 C 风格的字符串和指针,那么试试这个:

char on[128]; //or however much room you think you'll need. Don't know? Maybe you shoulda used std::string ...
*on = '1';
*(on+1) = '\0'; //if you're using C-strings, better null terminate.
char off[128];
*off = '0';
*(off+1) = '\0';
send(1,&on);

关于c++ - 简单的 C++ 函数包含失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17329859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com