C++ C++;stringstream到char*转换内存分配

C++ C++;stringstream到char*转换内存分配,c++,arrays,memory-management,stringstream,istringstream,C++,Arrays,Memory Management,Stringstream,Istringstream,有人能解释一下下面的代码是如何工作的吗?不会使应用程序崩溃吗 int main() { char *tempStr = new char[5]; tempStr[0] = '\0'; string stemp = "helloworld"; stringstream sstream; sstream.str(stemp); cout << "len before = " << strlen(tempStr); sst

有人能解释一下下面的代码是如何工作的吗?不会使应用程序崩溃吗

int main() {
    char *tempStr = new char[5];
    tempStr[0] = '\0';
    string stemp = "helloworld";
    stringstream sstream;
    sstream.str(stemp);
    cout << "len before = " << strlen(tempStr);
    sstream >> tempStr;
    cout << "len after = " << strlen(tempStr) << endl;
    cout << tempStr << endl;
    delete[] tempStr;
    return 1;
}
  • stringstream
    是否为字符指针中的额外字符分配内存
  • 还想知道将数据从
    stringstream
    复制到char*数组而不超过为
    char*
    分配的内存的正确方法吗
  • 没有。您过度编写了内存,调用了未定义的行为,但是没有发生明显的事情,所以错误没有被注意到。没有要求这样做会触发任何人类可见的错误或特殊行为,因此措辞不明确的行为
  • 您必须一块一块地执行,如果
    char
    数组空间不足,则必须重新分配该数组。在C++中,手工操作很少有意义。只要使用
    std::string
    就可以了
  • 没有。您过度编写了内存,调用了未定义的行为,但是没有发生明显的事情,所以错误没有被注意到。没有要求这样做会触发任何人类可见的错误或特殊行为,因此措辞不明确的行为
  • 您必须一块一块地执行,如果
    char
    数组空间不足,则必须重新分配该数组。在C++中,手工操作很少有意义。只要使用
    std::string
    就可以了
  • stringstream是否为字符指针中的额外字符分配了内存

    否。您的代码调用未定义的行为

    还想知道在不超过为char*分配的内存的情况下,将数据从stringstream复制到char*数组的正确方法吗

    阅读
    char*
    不是一个好主意。使用
    std::string
    从流中读取输入。但是如果你仍然想为了知识而知道,那就用吧


    顺便说一下,您可以合并这两行:

    stringstream sstream;
    sstream.str(stemp);
    
    合二为一:

    stringstream sstream(stemp);
    
    或者简单地说:

    stringstream sstream("helloworld"); //no need of stemp!
    
    希望有帮助

    stringstream是否为字符指针中的额外字符分配了内存

    否。您的代码调用未定义的行为

    还想知道在不超过为char*分配的内存的情况下,将数据从stringstream复制到char*数组的正确方法吗

    阅读
    char*
    不是一个好主意。使用
    std::string
    从流中读取输入。但是如果你仍然想为了知识而知道,那就用吧


    顺便说一下,您可以合并这两行:

    stringstream sstream;
    sstream.str(stemp);
    
    合二为一:

    stringstream sstream(stemp);
    
    或者简单地说:

    stringstream sstream("helloworld"); //no need of stemp!
    

    希望对您有所帮助。

    我们也可以做
    sstream是的,因为它是
    stringstream
    ,同时用于输入和输出。我有一个要求,不能使用string。因此,唯一的方法是使用
    istream::read
    并指定字符数组的最大长度。谢谢。事实上,我正在用
    >运算符在
    中阅读
    整数
    字符*
    数据类型。对于
    integer
    char*
    @N3Xg3N,有没有一种方法可以在不做任何改变的情况下仍然这样做?这里的
    宏是什么?在ideone.com或pastebin.com上发布您的代码我们也可以做
    sstream是的,因为它是
    stringstream
    ,用于输入和输出。我有一个要求,不能使用字符串。因此,唯一的方法是使用
    istream::read
    并指定字符数组的最大长度。谢谢。事实上,我正在用
    >运算符在
    中阅读
    整数
    字符*
    数据类型。对于
    integer
    char*
    @N3Xg3N,有没有一种方法可以在不做任何改变的情况下仍然这样做?这里的
    宏是什么?在ideone.com或pastebin.com上发布您的代码