【发布时间】:2017-07-21 23:08:41
【问题描述】:
我的问题是当我使用这个时:
LPSTR a = "0";
LPSTR b = "1";
LPSTR c = "2";
LPSTR d = "3";
LPSTR e = "4";
TCHAR strex[5];
DWORD x;
myFile = CreateFile("C:\\a.txt", FILE_WRITE_DATA, NULL, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
TCHAR n[5];
StringCchCopy(n, 5, a);
StringCchCat(n, 5, b);
StringCchCat(n, 5, c);
StringCchCat(n, 5, d);
StringCchCat(n, 5, e);
strex = n;
WriteFile(myFile, strex, (DWORD)(sizeof(strex)), &x, NULL);
CloseHandle(myFile);
我收到此行的此错误:strex = n;
错误 C2106: '=' : 左操作数必须是左值
如果我将TCHAR strex[5]; 更改为TCHAR strex;,则会出现以下错误:
错误 C2440:“=”:无法从“TCHAR [5]”转换为“TCHAR”
和
错误 C2664:“WriteFile”:无法将参数 2 从“TCHAR”转换为“LPCVOID”
有没有办法用不同的代码完成我想要做的事情?帮助将不胜感激。
【问题讨论】:
-
数组不是 C++ 中的左值。因此,
strx = n;声明毫无意义,编译器对此提出了正确的抱怨。将strex[5]更改为简单的strex至少应该在此代码中的所有位置标记警告和/或错误,并且应该注意所有。通过猜测来学习 C++ 并不高效。 I suggest a good book -
数组是 C 和 C++ 语言中的二等公民,不能指定为
strex = n;。您必须单独复制每个元素。在 C++ 中,您有std::string可以分配 。 -
感谢 WhozCraig 和 Bo Persson 的帮助。