我正在使用需要提供大型(20kb)静态html页面的wifi微控制器。因为微控制器上的各个缓冲区只能容纳1.4kb,所以有必要将html拆分成块并一次发送一个。
我现在拥有的是大约100个字符串,它们看起来像这样:
char HTML_ID_96[] = "\
<p><a href=\"#t\">Return to top</a></p>\
<a id=\"id9\"/>\
<span class=\"s\">Firmware Version/Information</span>\
<span class=\"c i\" id=\"id9-h\" onclick=\"h(\'id9\');\">hide</span> \
<span class=\'c\' id=\"id9-s\" onclick=\"s(\'id9\');\">show</span>\
<table class=\"t i\" id=\"id9-table\"><tbody>\
";
我想通过将它们粘贴在一个数组中来对所有字符串强加一个可迭代序列的方法,但我不知道如何打包它们。
我试过了:
char** all = [HTML_ID_1, ..., HTML_ID_99];
char* all[] = [HTML_ID_1, ..., HTML_ID_99];
char all[][] = [HTML_ID_1, ..., HTML_ID_99];
但他们都没有编译。任何关于C如何处理数组的引用都是一个奖励。
扩展:
char const* HTML_ID_100 = "\
</form>\
</body>\
</html>\
";
char const* all[] = {HTML_ID_100};
没有编译。我正在使用gcc 3.4.4。报告了两个错误:“初始化元素不是常量”和“(接近初始化'all [0]')”。两者都出现在最后一行。
答案 0 :(得分:8)
使用大括号进行数组初始化。
char* all[] = { HTML_ID_1, ..., HTML_ID_99 };
答案 1 :(得分:4)
指向字符串的指针数组:
char* all[] = {HTML_ID_1, ..., HTML_ID_99};
请注意,您可能希望使用NULL指针终止数组,具体取决于您将如何遍历数组:
char* all[] = {HTML_ID_1, ..., HTML_ID_99,NULL};
此外,如果不修改字符串,可以通过将它们声明为文字字符串的简单指针而不是由文字初始化的char数组来保存一些数据空间:
char const* HTML_ID_96 = "\
<p><a href=\"#t\">Return to top</a></p>\
<a id=\"id9\"/>\
<span class=\"s\">Firmware Version/Information</span>\
<span class=\"c i\" id=\"id9-h\" onclick=\"h(\'id9\');\">hide</span> \
<span class=\'c\' id=\"id9-s\" onclick=\"s(\'id9\');\">show</span>\
<table class=\"t i\" id=\"id9-table\"><tbody>\
";
答案 2 :(得分:2)
你在正确的轨道上,但你需要使用花括号进行静态数组声明。这应该有效:
char* all[] = {HTML_ID_1, ..., HTML_ID_99};
我会考虑你在做什么以及是否有更好的方法来做到这一点。例如。如果它是微型的,你可以在程序存储器(即NVRAM)中制作一个大型阵列并从中串行读取吗?