这可能会做你想做的,但它不完全是你所要求的。
#include <stdio.h>
char *strs[] = {
"foo",
"bar",
"bazy"
};
int main() {
printf("%d - %s\n", strlen(strs[0]), strs[0]);
printf("%d - %s\n", strlen(strs[1]), strs[1]);
printf("%d - %s\n", strlen(strs[2]), strs[2]);
return 0;
}
Output:
3 - foo
3 - bar
4 - bazy
请注意,您只需要存储数组的数组几种可能性。你可以做这个解决方案(做一个指向数组的指针数组),在一个大数组中创建一个“压缩的”数组列表,或者创建一个过大的二维数组。
“压缩”阵列将采取以下格式:
char strs[] = "foo\0bar\0bazy"; // array is {f,o,o,\0,b,a,r,\0,b,a,z,y,\0}
这种格式的问题是,它是有点棘手的第一个元素后访问任何内容,通常涉及通过阵列线性搜索。 (或保留一个单独的地址表...而不是像第一个解决方案)
2-d阵列需要您指定的所有尺寸,看起来像这样:
char strs[3][5] = {
"foo",
"baz",
"baxy"
};
int main() {
printf("%d - %s\n", strlen(strs[0]), strs[0]);
printf("%d - %s\n", strlen(strs[1]), strs[1]);
printf("%d - %s\n", strlen(strs[2]), strs[2]);
return 0;
}
在内存这可能是布局是这样的:
{f,o,o,\0,*,b,a,z,\0,*,b,a,x,y,\0} (the *'s could be anything, most dependent on your compiler)
由于编译器知道每个字符串只需要5个字节,因此它可以轻松地计算后面元素的位置。
'char str [] = {};'。那么,我已经看到很多方法在脚下射击自己,这是一个新的。 – Zeta 2013-03-19 15:45:19
这些是两个问题,每个问题选择一个。在你问任何一个人之前,练习你自己的问题解决能力。 – moooeeeep 2013-03-19 15:47:04
作为一个旁注,使用以'str'开头的名称不是一个好主意,因为那些已经被标准库使用。具体而言,'strstr'是查找一个字符串是否包含另一个字符串的函数。 – 2013-03-19 18:30:08