これはおそらくあなたが望むことをするでしょう、しかしそれはあなたが正確にあなたが求めたものではありませんでした。
#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;
}
出力:
3 - foo
3 - bar
4 - bazy
配列の配列を格納する可能性はごくわずかであることに注意してください。このソリューションが行うことを実行する(配列へのポインターの配列を作成する)か、大きな配列内の配列の「圧縮された」リストを作成するか、または過度に大きな2次元配列を作成することができます。
「圧縮された」配列は次の形式を取ります。
char strs[] = "foo\0bar\0bazy"; // array is {f,o,o,\0,b,a,r,\0,b,a,z,y,\0}
この形式の問題は、最初の要素の後にあるものにアクセスするのがやや難しいことであり、通常は配列を直線的に検索する必要があります。(または、アドレスの個別のテーブルを保持する...最初のソリューションのように)
2次元配列では、すべてのサイズを指定する必要があり、次のようになります。
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バイトかかることを認識しているため、後の要素の場所を簡単に計算できます。