我正在使用一个wifi微控制器,它需要提供一个大的(20kb)静态html页面因为微控制器上的单个缓冲区只能容纳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>\
";
我想用一种方法将iterable序列附加到所有字符串上,方法是将它们粘贴到一个数组中,但我不知道如何打包它们。
我试过:
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。报告了两个错误:“initializer element is not constant”和“(all[0]'接近初始化)”都出现在最后一行。
最佳答案
指向字符串的指针数组:
char* all[] = {HTML_ID_1, ..., HTML_ID_99};
请注意,可能需要使用空指针终止数组,这取决于要在数组上迭代的方式:
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>\
";