在LPSTR(UNICODE)C ++中递增元素时出错

时间:2014-04-28 20:43:16

标签: c++ winapi unicode

我目前正在检查Windows应用程序中字符的适当间距。   但是我想测试一下,所以我制作了这段代码片段,但它引发了一个例外,它只会在我增加r [0]时抛出它。

但是从我的理解r商店" A \ 0" .r [0]将取消引用' r [0]'这会增加对吗?我错了,如果有的话帮助我。

我使用了静态,因为r在WM_PAINT消息中。

//function starts
.
.
. 

static LPTSTR r = TEXT("A");
TextOut(hdc, x, y + cy + cy + cspace + cspace, r,   sizeof(r));
TextOut(hdc, x+tm.tmAveCharWidth*1.5, y + cy + cy + cspace + cspace, r, sizeof(r));

if (r[0]<93)
r[0]++;

.
.
.

2 个答案:

答案 0 :(得分:1)

确定了以下几点:

  1. 使用TCHAR:请避免使用它们,它们仅用于移植古老的Windows应用程序。你不是那样做的,对吗?
  2. sizeof(r)sizeof(LPTSTR),而不是您要传递的字符串的长度。使用strlen或广泛的变体。
  3. r [0] ++:r指向一个字符串文字,它是常量,因此你有未定义的行为,任何事情都可能发生,在你的情况下是&#34;访问违规&#34 ;

答案 1 :(得分:1)

更改

static LPTSTR r = TEXT("A");

static TCHAR r[2] = _T("A");

你拥有的是一个指向常量字符串的指针。你不能改变常数。你需要做的是分配你可以实际修改的内存。