0

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

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;
}

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

重写 send 函数中实际使用的函数以采用不同类型的参数,而不仅仅是发送它想要的参数,这要困难得多。感谢大家!

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

4

2 回答 2

1

你的问题不是你想的那样。它在这里:

char* on;
*on = '1';

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

看,如果你想开始在内存中存储东西,你必须先分配那个内存。正如 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);
于 2013-06-26T21:13:13.003 回答
0

好的,我认为您尝试执行以下操作,我尝试使其更具 C++ 风格,并防止使用指针,因为在您显示的代码中它们不应该是必需的。

digispark.cpp

#include "send.h"

int main (int argc, char** argv){

    string on  = "1";
    string off = "0";

    send ( on );
    send ( off );

    return 0;
}

发送.cpp

#include <iostream>
#include <string>

void send( const std::string& s) {

    std::cout << s << std::endl;

}

发送.h

void send(const std::string& s);
于 2013-06-26T20:55:10.570 回答