我正在尝试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;
}
答案 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());