【问题标题】:C++ Win32, Unhanded exception access violating writingC++ Win32,未处理的异常访问冲突写入
【发布时间】:2015-02-12 07:39:41
【问题描述】:

我有以下代码:

    TCHAR szAppName[] = TEXT("HellowWin");

    TCHAR *trTemp = L" ";
    *trTemp= szAppName[5];

基本上我在这里所做的是我试图在 szAPPName 的索引 5 处分配“值”以替换指针 trTemp 表示的值,但我遇到了访问冲突错误.

有什么想法吗?

下面你可以看到完整的代码:

#include <Windows.h>
#include <stdio.h>
#include "stdafx.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShoe)
{
        TCHAR szAppName[] = TEXT("HellowWin");

        TCHAR *trTemp = L" ";
        *trTemp= szAppName[5];
}

【问题讨论】:

    标签: c++ arrays pointers char


    【解决方案1】:

    字符串文字是只读的。写信给他们是未定义的行为。将字符串文字分配给指针时,应添加const。

    const wchar_t *trTemp = L" ";
    

    如果要写入变量,请将其声明为数组,以便它保存字符串文字内容的副本,从而可写

    wchar_t trTemp[] = L" ";
    

    (请明确使用wchar_t 而不是那些宏。)

    【讨论】:

    • 谢谢,我在用一本旧书。它似乎很喜欢 TCHAR 符号。
    【解决方案2】:
    TCHAR *trTemp = L" ";
    

    分配trTemp 指向一个常量。该常量将位于代码段中的某个位置。当您尝试覆盖它时,O/S 不喜欢它。

    TCHAR trTemp[2]={L' ',L'\0'};
    

    应该会看到你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      相关资源
      最近更新 更多