我正在尝试使用一个字符串数组,其中此数组的每个索引都存在另一个字符串数组。
char Example[0] = { "array", "of", "strings"}
Example[1] = { "array", "of", "strings2"}
Example[...] = { ... }
我曾想过尝试使用char ** array [some_number]作为一种方法,但我发现语法不舒服。
#include <stdio.h>
int main(){
char *test[10] = {0};
char *ex[3] = {0};
ex[0] = "array";
ex[1] = "of";
ex[2] = "strings";
test[3] = *ex;
printf("Content of test[3] = %s %s\n", test[3], ???);
return 0;
}
我在尝试打印出来时遇到了困难...有没有其他方法可以实现我提到的内容?任何资源/帮助都会很棒。
答案 0 :(得分:5)
我不确定你想要什么,但如果你想要一个包含字符串数组指针的数组,那么你有两种选择。
首先要记住数组衰减到指向其第一个元素的指针。对于像
这样的字符串数组const char *array_of_strings[3] = { "abc", "def", "ghi" };
然后衰减的结果(等于&array_of_strings[0]
)是指向const char
的指针,即const char**
。这意味着要有一个数组,你可以像
const char **array_or_arrays_1[] = { array_of_strings };
另一种方法是使用运算符&
的地址指向显式字符串数组。当你到&array_of_strings
时,你得到一个指向char
的三个指针数组的指针,类型为const char *(*)[3]
。您可以使用类型别名轻松声明它:
typedef const char *(array_of_3_strings_t)[3];
array_of_3_strings *array_of_arrays_2[] = { &array_of_strings };
答案 1 :(得分:2)
试试这个:
const char* example[] = { "array", "of", "strings" };
这是一个3(隐式)指向char数组的数组,无法修改。通过example[0]
阅读第一个。
答案 2 :(得分:0)
我想了解你在说什么&#34;更有活力的方法&#34;。 也许你想要制作列表数组,每个列表(字符串)可以有不同的大小。如果那是你想要的,这些代码可能有所帮助:
#include<stdio.h>
#include<string.h>
typedef char * string;
int main()
{
string array1[]={"apple","durian"};
string array2[]={"mustard","carrot","spinach"};
string array3[]={"garlic","onion","pepper", "blackpepper"};
string
* array_of_array[]={ array1,
array2,
array3 };
printf("\n%s %s", array_of_array[0][1],array_of_array[2][3]);
return 0;
}
控制台结果:
durian blackpepper
但是,如果你的意思是必须动态初始化所有资源,那么这段代码可能会有所帮助......
#include<stdio.h>
#include<string.h>
typedef char * string;
typedef string * arrayString;
typedef arrayString * arrayList;
string newString(char * temp);
arrayString newArrayString(int size);
arrayList newArrayList(int size);
int main()
{
//Example 1, static allocation, string constant
string array1[]={"apple","durian"};
string array2[]={"mustard","carrot","spinach"};
string array3[]={"garlic","onion","pepper", "blackpepper"};
arrayString Example_One[3]={ array1, array2, array3 };
//Example 2, dynamic allocation using pointer struct
/************************************************************/
arrayList Example_Two=newArrayList(3);
arrayString ExTwoValue1=newArrayString(2);
arrayString ExTwoValue2=newArrayString(3);
arrayString ExTwoValue3=newArrayString(4);
Example_Two[0]=ExTwoValue1;
ExTwoValue1[0]=newString("apple2");
ExTwoValue1[1]=newString("durian2");
Example_Two[1]=ExTwoValue2;
ExTwoValue2[0]=newString("mustard2");
ExTwoValue2[1]=newString("carrot2");
ExTwoValue2[2]=newString("spinach2");
Example_Two[2]=ExTwoValue3;
ExTwoValue3[0]=newString("garlic2");
ExTwoValue3[1]=newString("onion2");
ExTwoValue3[2]=newString("pepper2");
ExTwoValue3[3]=newString("blackpepper2");
/************************************************************/
//Print Result Here...
printf("\n%s %s", Example_One[0][0],Example_One[2][3]);
printf("\n\n%s %s", Example_Two[0][0],Example_Two[2][3]);
return 0;
}
string newString(char * temp)
{
string str = (string)malloc(sizeof(char)*(strlen(temp)+2));
strcpy(str,temp);
return str;
}
arrayString newArrayString(int size)
{
arrayString arrStr= (arrayString)malloc(sizeof(string)*size);
return arrStr;
}
arrayList newArrayList(int size)
{
arrayList arrLst= (arrayList)malloc(sizeof(arrayString)*size);
return arrLst;
}
控制台结果:
apple blackpepper
apple2 blackpepper2