我使用 FRDM-K64F 微控制器创建了一个使用 C 语言的网络服务器。我的网络服务器提供了一个带有一些文本框和显示消息的网页。我的下一个挑战是存储用户提供的 IP 地址和比特序列。
我创建了两个全局数组 ipaddr[3][17] 和 bits[3][17] 来存储位和 ipaddresses,我现在想增加数组的大小,但我观察到如果我增加数组的大小甚至 ipaddr [4][17],它使我的网络服务器崩溃。以下是将用户提供的字符串复制到数组的代码。
void testFunc(char * str)
{
char *ht="://";
char *ur="/cgi-bin/ext/e_alarm.cgi?zone=0";
char *ip; //ip address to be stored from the user
ip = new char[15];
char *pch; //use for tokenizing the string
char *htt; //combining the strings
char *b; //bits to be stored from the user
b = new char [6];
if(strstr(str,"trigger") != NULL)
{
//ip1="http://192.168.0.233/cgi-bin/ext/e_alarm.cgi?zone=0";
RED_ON; GREEN_OFF; BLUE_OFF;
pch = strtok (str,"&=");
ip = pch;
pch = strtok (NULL, "&=");
pch = strtok (NULL, "&=");
b = pch;
pch = strtok (NULL, "=");
htt = pch;
strcat(htt, ht);
strcat(htt, ip);
strcat(htt, ur);
printf("htt is %s \n",htt);
memcpy(ipaddr[counter], ip, strlen(ip));
memcpy(bits[counter], b, strlen(b));
counter++;
printf("\n");
for (int k = 0; k < counter; k++)
{
printf("IP ADDRESSES: %s", ipaddr[k]);
printf("...Bits %s \n", bits[k]);
}
}
}
其中 str 是用户提供的数据,然后我使用了一些标记化技术来提取 ip 和 bits。当用户按下按钮程序调用此函数时,奇怪的是我的网络服务器在获取 ip 地址后崩溃,当我将分配 ip 放入浏览器的 url 时,它在几次刷新后崩溃。如果我删除了 memcpy 函数,它可以正常工作,或者如果我减小全局声明数组的大小,即 ipaddr 和位到 [3][17],它也可以正常工作。
附带说明一下,我使用的是 74KB 的闪存和 54KB 的 RAM,而 MBED 微控制器的总内存是 1MB 的闪存和 512KB 的 RAM。