与strrchr一起使用时strcpy崩溃

时间:2015-08-20 17:43:00

标签: c++ windows winapi

调用strcpy时此代码崩溃。我在代码的许多地方使用这种方式来创建路径。但是这个代码总是在一个特定的函数中失败。这段代码有什么问题。

char updaterPath[1024];
if(GetModuleFileName(NULL, updaterPath, 1024)==0)
{
    return 0;
}
char * temp=strrchr(updaterPath,'\\');
strcpy(temp,"\\ru.exe");

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。但它是蹩脚的,没有意义。我原来的代码是这样的

char updaterPath[1024];
    if(GetModuleFileName(NULL, updaterPath, 1024)==0)
    {
        return 0;
    }
            if(RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\ddddd",0,NULL,0,KEY_ALL_ACCESS,NULL,&hKey,NULL)==ERROR_SUCCESS)
            {
                long res1=RegQueryValueEx(hKey,"version", NULL, NULL, (LPBYTE)regVersion, &regVersionLen);
                if(res1==ERROR_FILE_NOT_FOUND||strcmp(regVersion,AutoVersion::FULLVERSION_STRING))          //check for version mismatch and go in
                {

                    char * temp = strrchr(updaterPath,'\\');
                    strcpy(temp+1,"Downloads\\ru.exe");

我把它改成了这个,现在工作正常

char updaterPath[1024];
    if(RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\ddddd",0,NULL,0,KEY_ALL_ACCESS,NULL,&hKey,NULL)==ERROR_SUCCESS)
    {
        long res1=RegQueryValueEx(hKey,"version", NULL, NULL, (LPBYTE)regVersion, &regVersionLen);
        if(res1==ERROR_FILE_NOT_FOUND||strcmp(regVersion,AutoVersion::FULLVERSION_STRING))          //check for version mismatch and go in
        {
            if(GetModuleFileName(NULL, updaterPath, 1024)==0)
            {
                return 0;
            }
            char * temp = strrchr(updaterPath,'\\');
            strcpy(temp+1,"Downloads\\ru.exe");