0

我使用 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。

4

0 回答 0