C ++为char **

时间:2015-08-02 19:09:59

标签: c++ variables char c-preprocessor

我试图为char**变量分配值。在我的foo.h中,我定义了一些变量,例如

#define APIOCTET         int
#define APILONG          long                  
#define APICHAR          char               
#define APISTRING        char* 

现在我的foo.cpp我尝试使用

的方法
APILONG apiInitialize(APISTRING filePath, APISTRING* outputString)
{
  //open text file to where output will be printed
  //do other stuff, etc..
  //return result;
}

我想为我的APISTRING* outputString分配一个值,但我无法弄清楚如何这样做,我尝试了许多基本上是变体的东西。以下代码

APISTRING  error = "error";
APISTRING  other = "string";
APISTRING  charArr[] = { error, other, error };
APISTRING  *charArr2[] = { charArr };
errorString = *charArr2; 

我还不是100%明确APISTRING* outputString到底是什么。当我尝试编译时,它给出了一条错误消息,其中提到它是char**。它是一个2D数组吗?指向字符数组的指针?..但最重要的是,我如何为这个变量赋值?提前谢谢。

2 个答案:

答案 0 :(得分:1)

APISTRING *是指向char的指针。它包含一个地址,用于保存内存中字符串第一个字符的地址。

有关C / C ++中双指针的更多信息,请参阅此question

要分配到您需要执行的字符串*outputString = "string"

答案 1 :(得分:0)

APISTRING * outputString将在编译时被预处理并重新列为char ** outputstring。因此,outputString将是双指针因此,您需要这样做(在代码下面)。为简单起见,我将.h和cpp结合在一起。

#include<iostream>
using namespace std;

#define APIOCTET         int
#define APILONG          long                  
#define APICHAR          char               
#define APISTRING        char* 

APILONG apiInitialize(APISTRING filePath, APISTRING* outputString)
{
    APISTRING getIt = *outputString;
    cout<<"  "<<getIt<<endl;
}

int main()
{
    APISTRING str = "hello";
    APISTRING* outputString = &str;
    APILONG val = apiInitialize("world", outputString );

    system("PAUSE");
    return 0;
}

我建议使用std :: string,用某些行为很容易调整。希望这会有所帮助。