C++ 字符串指针上的strcpy给出错误

C++ 字符串指针上的strcpy给出错误,c++,C++,我读了很多关于这个主题的书,我很困惑 以前在C文件中工作而不在cpp文件中工作的内容: 然后我在strcpy函数中得到错误: void Intepreter::setBuiltIns(char *builtins) { strcpy(builtinFunctions, builtins); // no matching function call to strcpy } 我可能不理解这里的基本知识,但是为什么C++中不行呢?我需要使用= =? strcpy(char *, const c

我读了很多关于这个主题的书,我很困惑

以前在C文件中工作而不在cpp文件中工作的内容:

然后我在strcpy函数中得到错误:

void Intepreter::setBuiltIns(char *builtins)
{
   strcpy(builtinFunctions, builtins); // no matching function call to strcpy
}
<>我可能不理解这里的基本知识,但是为什么C++中不行呢?我需要使用= =?
strcpy(char *, const char*) = thats the structure
如果我将内置函数从指针更改为指针,它就会工作

编辑: 在本次编辑之前成为常量的原因是我在这里读到:

该字符内置函数[20];将在以下情况下生成警告:

builtinFunctions[0]="me";

的确如此。我可以通过删除常量来修复它。

这是指向char的指针数组

char  *builtinFunctions[20];
所以你打电话

strcpy(builtinFunctions, builtins);
将被视为strcpychar**,char*,而不是strcpychar*dest,const char*src。所以第一个参数类型不匹配

编辑:

假设BuiltinFunction是一个要填充的单词数组,其中包含void Intepreter::setBuiltInschar*内置函数,其第一个参数是指向新输入单词的指针。你是用C风格的方式来做的。好吧,由你决定

有些事情要考虑。

如果声明数组类型arrName[N];然后是数组的名称 单独使用而不使用索引被视为类型变量 键入*arrName。如果您最初键入的是char*,则 内置函数本身的类型为char**。这就是为什么你的 strcpy失败,但是strcpybuiltinFunctions[someIndex],内置; 工作

在调用StrucPy之前,如果你有一个 已分配目标空间。内置函数[someIndex]是 键入char*。它指向哪里?它是指向 分配的空间,或是通向地狱般的未定义行为的门户strcpy会乐意带你去哪里


这是指向char的指针数组

char  *builtinFunctions[20];
所以你打电话

strcpy(builtinFunctions, builtins);
将被视为strcpychar**,char*,而不是strcpychar*dest,const char*src。所以第一个参数类型不匹配

编辑:

假设BuiltinFunction是一个要填充的单词数组,其中包含void Intepreter::setBuiltInschar*内置函数,其第一个参数是指向新输入单词的指针。你是用C风格的方式来做的。好吧,由你决定

有些事情要考虑。

如果声明数组类型arrName[N];然后是数组的名称 单独使用而不使用索引被视为类型变量 键入*arrName。如果您最初键入的是char*,则 内置函数本身的类型为char**。这就是为什么你的 strcpy失败,但是strcpybuiltinFunctions[someIndex],内置; 工作

在调用StrucPy之前,如果你有一个 已分配目标空间。内置函数[someIndex]是 键入char*。它指向哪里?它是指向 分配的空间,或是通向地狱般的未定义行为的门户strcpy会乐意带你去哪里


这在C中也不起作用。什么类型的内置功能?你能帮我理解我做错了什么吗?在C++编译器中需要变量的const,否则您将得到warning@Curnelious我是。回答问题。在我编辑之后,答案是它是指针。@Curnelious,在你编辑之后,它不是指针。这是一个指针数组。这在C中也不起作用。什么类型的内置功能?你能帮我理解我做错了什么吗?在C++编译器中需要变量的const,否则您将得到warning@Curnelious我是。回答问题。在我编辑之后,答案是它是指针。@Curnelious,在你编辑之后,它不是指针。这是一个指针数组。那么,在这个函数中,如何将新值复制到此指针?我应该把它从指针改成指针吗?它应该是一个单词数组,这就是为什么我使用了一个指针,例如{aaa,bob,;那么你如何在这个函数中将一个新的值复制到这个指针上?我应该将它从一个指针改为一个单词数组吗?它应该是一个单词数组,这就是为什么我使用了一个指针,例如{aaa,bob,;