如何将此信息添加到数组?

时间:2017-10-29 22:02:09

标签: c

我在C中有这个项目,代码看起来像这样。

BOOL Commands(LPBYTE command, DWORD size)
{
wchar_t params[MAXCHAR];
MultiByteToWideChar(CP_ACP, MB_COMPOSITE, (LPCCH)command, size, params, size);

wchar_t *bufferoon;
bufferoon = (wchar_t *)malloc(sizeof(wchar_t) * size);
wcscpy(bufferoon, params);


wchar_t buf2[MAXCHAR], *ptr;
int i;
wchar_t a[MAXCHAR];

for (ptr = wcstok(bufferoon, L","); ptr != NULL; ptr = wcstok(NULL, L","))
{
    CWA(lstrcpyW, kernel32, buf2, ptr);
    for (i = 0; i < lstrlenW(buf2); i++)
    {

        if (buf2[i] == '=' )
        {
            wcscpy(a + i, buf2 + i + 1);
            MessageBoxW(0, a + i, 0, 0);    
        }

    }

}


free(bufferoon);

CWA(Sleep, kernel32, 100);
return 1;
}

它从PHP页面获取一个字符串,然后将其拆分,在“=”之前删除“=”和一些垃圾,然后逐个显示MessageBoxes中的重要数据并且效果很好。

但是,我想创建一个包含所有数据的数组,而不是在消息框中显示它。

例如,一些返回为“a + i”的数据将包括:

 1. https
 2. //test.com/test.doc
 3. H3IG2IOUFG23IOFGU2H3
 Etc.

我想创建一个数组,所以我可以使用它来创建if语句。

例如,我希望能够做到这样的事情:

if(strarray[1] == L"https") 
{ 
MessageBoxW(0,L"Element 1 equals HTTPS",0,0);
}

然而,经过几百万小时的尝试后,我仍然没有任何线索,所以我要求StackOverflow上的人们作为最后的手段。

有没有人有想法?我的大脑现在已经被炒了,如果有人可以帮助我,我会非常感激。

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果要使用数组,则需要知道大小。你有两个选择:

1)使用malloc分配N个元素的数组(只需选择一些数字N),填充数组,并递增大小变量。如果大小超过N,则需要realloc更大的N。

2)执行两个循环。第一个循环计算数组元素的数量。第一个循环结束后,使用malloc分配知道大小的数组。然后执行第二个循环来填充数组。

int N=0;
wchar_t *saved = wcsdup(bufferoon);
for (ptr = wcstok(bufferoon, L","); ptr != NULL; ptr = wcstok(NULL, L","))
{
    for (i = 0; i < lstrlenW(ptr); i++)
    {
        if (ptr[i] == '=' )
        {   
            ++N;
            break;
        }
    }
}
int j=0;
wchar_t **a = malloc(N*sizeof(*a));
for (ptr = wcstok(saved, L","); ptr != NULL; ptr = wcstok(NULL, L","))
{
    for (i = 0; i < lstrlenW(ptr); i++)
    {
        if (ptr[i] == '=' )
        {   
            a[j++] = wcsdup(ptr+i+1);
            break;
        }
    }
}
free(saved);