需要为字符串分配内存

Anc*_*nek 7 solidity

我正在学习 Solidity ,但我陷入了内存存储calldata 的困境。我正在阅读文档并发现了这个

现在,结构体、数组或映射类型的所有变量的显式数据位置都是强制性的。这也适用于函数参数和返回变量

然而,有一个示例合同:

contract ExampleContract {
  string public myText = "Hello, world!";

  function getMyText() public view returns (string) {
    return myText;
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误告诉我Data location must be "memory" or "calldata" for return parameter in function, but none was given.

为什么要求字符串具有显式定义的数据分配(例如在函数参数或返回中)?

Anc*_*nek 5

这篇文章有我的问题的答案。

这两个[bytesstring类型]都是动态数组类型,这意味着它们可以存储任意大小的数据。毫不奇怪,类型变量的每个元素bytes都是一个字节。类型变量的每个元素string都是字符串的一个字符。”

离理解 Solidity 又近了一步:)