【发布时间】:2021-05-17 14:35:41
【问题描述】:
我的问题与this 有关,但来自略有不同的网站。
假设我们有相同的数组
const char *data[] = {
"Str1",
"Str Two",
"Long string three",
};
好的,编译器知道数组的长度,我们可以在编译时得到它:sizeof(data)/sizeof(data[0])。同时编译器知道每个字符串的大小,比如strlen(data[1]) 的结果实际上在编译时是已知的。但strlen 是运行时调用,sizeof[i] 将始终返回sizeof(char *) 值。有什么方法可以获取数组中每个字符串的长度没有将每个字符串单独定义为变量或宏?
【问题讨论】:
-
sizeof(data[0])/sizeof(data[0][0]); -
编译器也知道
sizeof("whatever"),所以让你的字符串宏并使用宏来初始化,并在你需要大小的地方使用sizeof(macro)。 -
@hetepeperfan 如果我错了,请纠正我,但这不只是将 char 指针的大小除以 char 的大小吗?
-
strlen有什么问题? -
@shved 宏不是变量。它不消耗任何内存。