【发布时间】:2013-05-23 14:55:25
【问题描述】:
我正在使用需要提供大型 (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。报告了两个错误:“initializer element is not constant”和“(near initialization for 'all[0]')”。两者都出现在显示的最后一行。
【问题讨论】:
-
初始化器使用
{},而不是[]。 -
有用提示:C 预处理器对字符串文字执行自动连接。所以你可以把你的代码写成
char HTML_ID_96[] =(新行)"<p><a href=\"#t\">Return to top</a></p>"(新行)"<a id=\"id9\"/>"(新行)。等等。不需要讨厌的反斜杠。 -
扩展名见stackoverflow.com/questions/3025050——你需要HTML_ID_*标识符,还是直接说
char *all [] = { "String 1", "String 2", ... };? -
@chirlu 是的,我确实需要所有这些标识符。根据微控制器的类型,我需要不同的字符串序列。我计划使用大部分相同的字符串构建至少两个序列。
-
然后以编程方式设置数组 (
all[0] = HTML_ID_1; all[1] = HTML_ID_2; ...) 或#define字符串(但您可能需要一个巧妙的链接器来合并相同的字符串文字)。
标签: c string variable-assignment