我需要编写一个函数,将字符串的内容填充到已分配长度的char*缓冲区中。如果字符串太长,我只需要截断它。缓冲区不是由我分配的,而是由我的函数用户分配的。我尝试了以下代码:
int writebuff(char* buffer, int length){
string text="123456789012345";
memcpy(buffer, text.c_str(),length);
//buffer[length]='\0';
return 1;
}
int main(){
char* buffer = new char[10];
writebuff(buffer,10);
cout << "After: "<<buffer<<endl;
}
我的问题是关于终止符:应该存在还是不存在?这个函数在更广泛的代码中使用,有时当字符串需要被截断时,我似乎会遇到奇怪字符的问题。请给出正确的操作建议。
std::
、new
、<<
(除非你是指位移),等等。 - pmgwritebuff
应该执行其所宣传的功能。如果调用者期望有终止符,则writebuff
必须提供它。如果调用者不期望有终止符,则writebuff
不得提供它。在这种特定情况下,调用者明显期望有终止符(operator<<(ostream, char*)
期望有终止符)。 - Robᵩ