【发布时间】: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代表plen,aaa代表table,其中存储了pattern的值。
【问题讨论】:
-
sizeof发生在编译时,取决于类型。 -
好吧,当我做 strlen 时,我得到 3..因为它是一个字符数组。但我不知道当我做 sizeof 时它是如何得到 8 的。
-
因为 table 是一个指针,并且在你的系统上指针的大小是 8 字节
-
如果您将
table视为字符串,请确保它以空值结尾,然后使用strlen检查长度。 -
指针不是保存数据,而是指向数据所在的地址。
标签: c++