我已经阅读了很多关于这个主题的内容,我很困惑。
以前在C
文件中工作的内容,而不是在cpp
文件上工作:
char *builtinFunctions[20];
然后我在strcpy函数上得到错误:
void Intepreter::setBuiltIns(char *builtins)
{
strcpy(builtinFunctions, builtins); // no matching function call to strcpy
}
我可能不明白这里的基础知识,但为什么在C ++中这不起作用(我需要使用 = 吗?)
strcpy(char *, const char*) = thats the structure
如果我将builtinFunctions
更改为它的工作指针。
修改 在编辑之前成为const的原因是我在这里阅读: Why is conversion from string constant to 'char*' valid in C but invalid in C++
char *builtinFunctions[20];
会在以下情况下发出警告:
builtinFunctions[0]="me";
它确实如此。我可以通过删除const来修复它。
答案 0 :(得分:3)
这是一个指向char的指针数组。
char *builtinFunctions[20];
所以你打电话
strcpy(builtinFunctions, builtins);
被视为strcpy(char **, char*)
,而不是strcpy(char *dest, const char *src)
。所以你得到第一个参数类型的不匹配。
修改强>
因此,假设builtinFunctions
是您希望填充的“一个单词数组”,void Intepreter::setBuiltIns(char *builtins)
意味着要做到这一点,它的第一个参数是指向新传入单词的指针。 (而且你是以C风格的方式做这件事。好吧,由你决定。)
需要考虑的一些事项。
如果声明数组type arrName[N];
,则声明数组的名称
单独使用而没有索引被视为类型的变量
type *arrName
。如果您最初键入char *
,那么
builtinFunctions
本身属于char**
类型。这就是你的原因
strcpy
失败,但是strcpy(builtinFunctions[someIndex], builtins);
作品。
在调用strcpy
之前,您应该考虑,如果您有
目的地空间分配。 builtinFunctions[someIndex]
是
输入char *
。它指向哪里?它是一个有效的指针
分配空间,或未定义行为地狱的门户strcpy
会很乐意带你去吗?