简体   繁体   中英

Concatenation of strings in C++ (Linux)

I want to concatenate three string in C++.

I have a vector std::vector<std::string> my_list where the filenames are stored. I want to add the directory and filename extension for each of the filenames in order to read binary the information from the file, so i do it like that:

for (int i = 0; i < my_list.size(); i++) {
        std::string tmp = prefix + my_list[i] + suffix;
        std::ifstream file(tmp.c_str(), std::ifstream::binary);
}

where prefix ist std::string prefix = "directory/" and suffix ist std::string suffix = ".foo".

And it works in Windows. However it doesn't work in Linux. Suffix overwrites "tmp"-string. It looks like foo/y_file_timestamp instead of out/my_file_timestamp.foo .

What should I do to prevent this overwriting?

The bug is not in the code you showed us.

The problem is that your strings have unexpected characters in them, specifically carriage returns ( '\\r' ) that cause the caret to return to the beginning of the line during output of your concatenated string to the terminal window.

Presumably this is a problem caused by careless parsing of input data with Windows-style line endings. You should normalise your data and be sure to strip all line-ending variants during parsing.

Always be sure to check the contents of your strings at the character-level when encountering a problem with string operations.

Thank you @BarryTheHatchet. I forgot to mention that vector my_list was filled this way:

std::string LIST_WITH_DATA = "data/list.scp"

const char* my_data = LIST_WITH_DATA.c_str();

std::ifstream my_file(my_data);

std::string my_line;

while (std::getline(my_file, my_line)) {

    my_list.push_back(my_line);

}

data/list.scp looks like:

file1/00001-a
file2/00001-b
file3/00001-c
file4/00001-d

std::getline was my problem.

The solution I found here: Getting std :: ifstream to handle LF, CR, and CRLF?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM