Convert char* to string C++

后端 未结 5 1966
轮回少年
轮回少年 2021-01-31 03:29

I know the starting address of the string(e.g., char* buf) and the max length int l; of the string(i.e., total number of characters is less than or equ

相关标签:
5条回答
  • 2021-01-31 03:57

    There seems to be a few details left out of your explanation, but I will do my best...

    If these are NUL-terminated strings or the memory is pre-zeroed, you can just iterate down the length of the memory segment until you hit a NUL (0) character or the maximum length (whichever comes first). Use the string constructor, passing the buffer and the size determined in the previous step.

    string retrieveString( char* buf, int max ) {
    
        size_t len = 0;
        while( (len < max) && (buf[ len ] != '\0') ) {
            len++;
        }
    
        return string( buf, len );
    
    }
    

    If the above is not the case, I'm not sure how you determine where a string ends.

    0 讨论(0)
  • 2021-01-31 03:59

    Use the string's constructor

    basic_string(const charT* s,size_type n, const Allocator& a = Allocator());
    

    EDIT:

    OK, then if the C string length is not given explicitly, use the ctor:

    basic_string(const charT* s, const Allocator& a = Allocator());
    
    0 讨论(0)
  • 2021-01-31 03:59
    std::string str;
    char* const s = "test";
    
    str.assign(s);
    

    string& assign (const char* s); => signature FYR

    Reference/s here.

    0 讨论(0)
  • 2021-01-31 04:08
    char *charPtr = "test string";
    cout << charPtr << endl;
    
    string str = charPtr;
    cout << str << endl;
    
    0 讨论(0)
  • 2021-01-31 04:14
    std::string str(buffer, buffer + length);
    

    Or, if the string already exists:

    str.assign(buffer, buffer + length);
    

    Edit: I'm still not completely sure I understand the question. But if it's something like what JoshG is suggesting, that you want up to length characters, or until a null terminator, whichever comes first, then you can use this:

    std::string str(buffer, std::find(buffer, buffer + length, '\0'));
    
    0 讨论(0)
提交回复
热议问题