【问题标题】:sizeof character array for a dynamically created array动态创建的数组的 sizeof 字符数组
【发布时间】:2014-03-14 19:16:34
【问题描述】:

我需要根据模式长度动态创建一个字符数组,即plen。但是,当我执行 sizeof(table) 时,我得到 8。为什么我得到的是 8 而不是 3

int main() {
    char *pattern = "aaa";
    int plen = strlen(pattern);
    char *table = new char[plen + 1];
    for(int i = 0; i < plen; i++) {
        table[i] = pattern[i];
    }
    cout << sizeof(table) << plen << table;
    return 0;
}

我得到的输出是83aaa...8代表sizeof(table)3代表plenaaa代表table,其中存储了pattern的值。

【问题讨论】:

  • sizeof 发生在编译时,取决于类型。
  • 好吧,当我做 strlen 时,我得到 3..因为它是一个字符数组。但我不知道当我做 sizeof 时它是如何得到 8 的。
  • 因为 table 是一个指针,并且在你的系统上指针的大小是 8 字节
  • 如果您将table 视为字符串,请确保它以空值结尾,然后使用strlen 检查长度。
  • 指针不是保存数据,而是指向数据所在的地址。

标签: c++


【解决方案1】:

这是因为table 是一个指针,而不是一个数组。在你的架构中,一个指针的大小是 8 个字节。

【讨论】:

  • 所以如果我使用 char *table=new char[plen+1];或 int * t=new int[4];并做一个 sizeof(t) 或 sizeof(table),我会得到 8,因为它是一个指针。好吧,对于一个 char *.. 我会做 strlen。我只是想看看有什么不同
【解决方案2】:

sizeof(expression) 只是sizeof(type of that expression) 的语法替代。

在您的示例中,sizeof(table) 只是sizeof(char*) 的语法替代品。结果永远不会考虑指针的值或它指向的 char 或它指向的数组,只考虑类型。

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 2012-02-20
    • 2012-02-15
    • 1970-01-01
    • 2017-03-29
    • 2011-02-12
    • 2011-08-21
    • 2019-04-18
    • 2023-03-16
    相关资源
    最近更新 更多