gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:01:26 25 4
gpt4 key购买 nike

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

以前在 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 来修复它。

最佳答案

这是一个指向 char 的指针数组。

char  *builtinFunctions[20];

所以你打电话

strcpy(builtinFunctions, builtins);

被视为 strcpy(char **, char*),而不是 strcpy(char *dest, const char *src)。因此,第一个参数类型不匹配。

编辑:

所以让我们假设 builtinFunctions 是您希望填充的“一个单词数组”,而 void Intepreter::setBuiltIns(char *builtins) 的意思就是用它的第一个参数是指向新输入单词的指针。 (并且您正在以 C 风格的方式执行此操作。好吧,由您决定。)

一些需要考虑的事情。

  1. 如果你声明一个数组type arrName[N];那么数组的名字在没有索引的情况下单独使用被视为类型的变量键入 *arrName。如果您输入的最初是 char *,那么builtinFunctions 本身是 char** 类型。这就是为什么你的strcpy 失败,但是 strcpy(builtinFunctions[someIndex], builtins);有效。

  2. 在调用 strcpy 之前,您应该考虑,如果您有分配的目标空间。 builtinFunctions[someIndex] 属于输入 char *。它指向哪里?它是指向一个的有效指针吗分配的空间,或通向未定义行为 hell 的大门 strcpy 会很乐意带你去?

关于c++ - 字符串指针上的 strcpy 给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38698546/

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