我的C ++语法非常生疏。这是我的代码:
/*
Add hdr of length length to the msg.
*/
void Message::msgAddHdr(char *hdr, size_t length)
{
char *temp; //temp to iterate through hdr
size_t i; //iterator
temp=hdr;//Set temp to beginning of header
//Iterate temp to the last letter of the header
for(i=0; i < length; i++)
{
*temp = temp -> next;
}
//Delete the null terminator after the hdr
delete *temp -> next;
//Set what temp is pointing to (which should be the last letter of the
//header) to point to the msg.
*temp -> next = Message.msg;
//Delete temp when you're done with it?
delete temp;
return;
}
我遇到的两个大问题是:
我在标题后添加Message.msg
,但调用此方法的方式如下:
m->msgAddHdr(h1,5);
如何在我的方法中使用那个?
答案 0 :(得分:2)
for(i=0; i < length; i++)
{
*temp = temp -> next;
}
我认为您的意思是temp
增加length
个元素。这是通过
temp += length;
char*
上没有可用的方法。
//Delete the null terminator after the hdr
delete *temp -> next;
无法在此处致电delete
。您只能使用delete
拨打new
。而且你不能从char*
C字符串的中间删除字符。
//Set what temp is pointing to (which should be the last letter of the
//header) to point to the msg.
*temp -> next = Message.msg;
不确定你在这里要做什么。没有next
。我想我们需要了解更多有关Message.msg
的信息。目前我们甚至不知道它是什么类型。
//Delete temp when you're done with it?
delete temp;
您没有使用temp
分配new
,因此您不能也不应该在其上拨打delete
。
return;
无需执行此操作,void函数将在到达结束时执行此操作。
更一般地说,我认为你需要回到你的教科书并了解基础知识。由于您使用的是C ++,因此可以使用更高级别的构造,如std::vector
和std::string
。一旦开始使用C ++,您应该完全避免char*
工作。这很麻烦,很难做对。原生C ++结构要简单得多。
我强烈建议您抛弃所有这些代码并尝试提出基于std::string
的版本。
答案 1 :(得分:0)
temp = temp->next
项是++temp;
。所以你可以简单地做temp += length
。this->msg
课程中宣布msg
,您可以使用msg
或Message
访问实际实例的消息。答案 2 :(得分:0)
我不确定你的代码是用什么语法编写的,但它不是真正的C ++,而且我不确定你要完成什么。无论如何,代码的正确语法可能是:
void Message::msgAddHdr(char* hdr, size_t length)
{
char* temp = hdr; // declare a pointer to the header
temp += length; // this sets the pointer to the last letter in header
for (int i = 0; i < LENGTH_OF_MSG; ++i)
*(++temp) = Message.msg[i]; // copy message to the end of header
// also, you sure it's not Message::msg and Message.msg?
// you need to make sure you have room, and you also need the length of
// the message
*temp = '\0'; // null-terminate the header
// no deletion required since you're not allocating anything here
}
我不确定这是否会做你想要做的事情。看来你只是想做一个基本的连接。
答案 3 :(得分:0)
正如其他人在答案中提到的那样,你使用++temp
来增加指针(原始指针上没有->next
成员)。
但是你有一个更大的问题,你的功能无法运作。你有一个指向你想要追加的字符串缓冲区的指针,但是你不知道缓冲区是否足够长。这里有各种选项,但你正在做的字符串操作看起来很像C;我建议你最好使用C ++习语,即。让函数返回一个字符串对象,而不是操纵现有的缓冲区,例如:
std::string Message::msgAddHeader(const char* hdr, size_t length) {
return std::string(hdr, hdr + length) + msg;
}