Question

let me first thank you for taking the time to read this.

I'm trying to read a file in c++. Currently I have a method that allows the user to select a file in explorer and returns this as an 'std::string'. I then have to open this file, but the method I have for this uses const char*. Therefore I need to convert from one to the other.

If there is an easy method in windows for reading a file using a string instead then let me know as it would solve my entire problem.

When I convert from string to const char*, using str.c_str(), I get a lot of weird characters at the end. I've researched other topics with the same problem, but the answers all seem very specific for those projects, or say just stick to sting/vector instead. Obviously I would happily do this, but I don't have a method that opens the file using a string/vector.

Any help is appreciated :) The code and output of where this occurs is pasted below.

*SOURCE

std::string f;

               if (LOWORD(wParam) == 1) {

                       f = openFile();

                       char *fchar = new char[f.size()+1]; // +1 to account for \0 byte

                       //char *fchar = std::vector[1];

                       std::strncpy(fchar, f.c_str(), f.size());

                       file1 = fchar;

                       std::cout<<"string size: " << f.size() << std::endl;
                       std::cout<<"string: " << f << std::endl;
                       std::cout<<"fchar: " << fchar << std::endl;
                       std::cout<<"file1: " << file1 << std::endl;
               }

OUTPUT

 string size: 33
 string: C:\Users\Joseph\Pictures\back_raw
 fchar: C:\Users\Joseph\Pictures\back_raw═²²²²½½½½½½½½¯■
 file1: C:\Users\Joseph\Pictures\back_raw═²²²²½½½½½½½½¯■**
Was it helpful?

Solution

std::strncpy() does not place a `\0' character at the end of the string. See http://www.cplusplus.com/reference/clibrary/cstring/strncpy/. You need to copy that as well:

std::strncpy(fchar, f.c_str(), f.size() + 1);

OTHER TIPS

Where is file1 declared ? What about openFile ? (would like to know its return type)

Could you try to manually put that '\0' ? IMHO, your char* is simply lacking the \0 at the end...

Make sure you put a \0 at the end, everywhere you need to.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top