C ++拆分字符串会产生奇怪的输出

时间:2016-06-28 15:06:29

标签: c++ string vector split

我正在尝试split string并且它有效。就在我将它打印到console时,我得到一个奇怪的output,就像这样 - ╨╕[╝。也许有人可以暗示我做错了什么?这是我的代码

#include <stdio.h>
#include <windows.h>
#include <string>
#include <sstream>
#include <vector>


using namespace std;

vector<string> &split(const string &s, char delim, vector<string> &elems);

vector<string> split(const string &s, char delim);

int main() {

    vector<string> x = split("E:\\TEST\\filename.txt", '\\');

    int pos = x.size() - 1;
    printf("filename is %s\n", &x.at(pos));

    system("PAUSE");

    return 0;
}

vector<string> &split(const string &s, char delim, vector<string> &elems) {
    stringstream ss(s);
    string item;
    while (getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}


vector<string> split(const string &s, char delim) {
    vector<string> elems;
    split(s, delim, elems);
    return elems;
}

2 个答案:

答案 0 :(得分:4)

使用printf("filename is %s\n", x.back().c_str());打印字符串。

您的问题是您将字符串对象的地址发送到printf但printf期望以null结尾的char数组。成员函数c_str为您提供了这个!

答案 1 :(得分:1)

您将错误的参数传递给printf("%s")%s需要一个C字符串(即char *),但是你传递的是C ++ std::string的地址。这是未定义的行为。

您需要做的是确保通过调用std::string方法获取std::vector<std::string>::at(int)返回的c_str()的C字符串表示形式:

printf("filename is %s\n", x.at(pos).c_str());