【发布时间】:2020-09-30 19:28:38
【问题描述】:
我正在处理旧代码,其中将字符串文字分配给在标题中定义的PTCHAR(指向字符的指针)类型的变量:typedef WCHAR TCHAR, *PTCHAR;
PTCHAR str;
str = _tcsrchr(dir, '\\');
*(str++)=0;
str = TEXT("This is stackoverflow");
我收到一条警告“不推荐将字符串文字转换为指向字符的指针(非常量)”,
我知道警告即将到来,因为 const 被分配给一个非常量指针变量,但我无法制作 str CONST(LPCSTR) 因为它在代码中被修改为*(str++)=0;
有没有办法解决这个问题?
【问题讨论】:
-
指向 const 的非 const 指针和指向非 const 的 const 指针是有区别的。你知道吗?
-
使用
LPCTSTR代替PTCHAR请参阅:docs.microsoft.com/en-us/windows/win32/winprog/… -
我做了同样的事情,但是之后 *(str++)=0 会抛出一个错误。
-
字符串
"This is stackoverflow"是常量(可能在只读内存中)。任何修改它的尝试都是未定义的行为。使用LPCTSTR会给你编译错误而不是UB。 -
请发minimal reproducible example,尤其是
*(str++)=0;的部分。问题可能就在那里。也许是meta.stackexchange.com/questions/66377/what-is-the-xy-problem