我试着理解这个c ++代码:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
char temp[50];
sprintf(temp,"%S",Edit1->Text);
Send(temp);
}
void TForm1::Send(char *TX_String)
{
unsigned char checksum = 0x02;
while(*TX_String)
{
checksum ^= *TX_String++;
}
checksum ^= 0x03;
}
我的复制品如下:
#include <iostream>
using namespace std;
void prepareAndSend() {
char Command[50];
sprintf(Command,"%s", "65535V");
unsigned char checksum = 0x02;
char* p = Command;
while(*p) {
checksum ^= *p++;
}
checksum ^= 0x03;
std:cout << checksum << std::endl;
}
int main() {
prepareAndSend();
return 0;
}
但是我收到错误:
error: lvalue required as increment operand checksum ^= *Command++;
此代码为从输入字段传递的文本创建校验和。我不熟悉c ++。任何想法为什么它不适合小提琴?
答案 0 :(得分:1)
因为char *Command[50];
与char* TX_String
不同。 char* TX_String
是指向一系列字符的指针,而char *Command[50];
是这样的指针数组。
试试这个:
void prepareAndSend() {
char Command[50];
sprintf(Command,"%s", "65535V");
unsigned char checksum = 0x02;
char* p = Command;
while(*p) {
checksum ^= *p++;
}
checksum ^= 0x03;
std:cout << checksum << std::endl;
}
答案 1 :(得分:1)
在您的代码中,您会遇到此错误:
char *Command[50];
错误:
error: lvalue required as increment operand checksum ^= *Command++;
基本上意味着你试图增加一些不是变量的东西。
这里的要点是当你有一个类似char a[10]
的数组时,在编译程序时,它将为你分配10 char
,并在程序集中分配名称a
每当您使用它时,代码将被替换为数组开头的地址。因此a
本身不是变量,但不能增加。
但是如果你定义一个char *b = a
,那么你正在分配一个变量,它有一个指针,当然可以被操纵。然后b++
有一个含义,即增加该地址。
答案 2 :(得分:0)
原始代码TX_String为char*
,代码中的命令为char**
相反,使用类似的校验和函数接受char*
,这将使调试更容易。
(并将char* Command[50]
替换为char Command[50]
)