我在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上的人们作为最后的手段。
有没有人有想法?我的大脑现在已经被炒了,如果有人可以帮助我,我会非常感激。
提前致谢!
答案 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);