当string最初位于std :: vector中时,c_str()产生不同的输出

Mic*_*sky -2 c++

我试图标记一个字符串,我有一些奇怪的行为.这是代码:

ifstream fin("myFile.txt");
char* in[256];
fin.getline(in,256);
string s = in;
vector<string> f;
f.push_back(s);
char* pch1,pch2;
pch1 = strtok((char*)s.c_str()," ");
pch1 = strtok(NULL," ");
pch2 = strtok((char*)f[0].c_str()," ");
pch2 = strtok(NULL," ");
Run Code Online (Sandbox Code Playgroud)

如果文件包含"This is a string"行,则存储在pch1位置的值将为"is",但pch2将指向null.这是为什么?

我打印出两个字符串s和f [0]的字节.s包含我期望的所有字符,包括空格.但是,f [0]包含0个字符而不是空格.我知道有时istream可以将空格视为空字符,但不应该s和f [0]包含完全相同的字节?

ala*_*ain 5

strtok修改字符串,它用'\ 0' 替换分隔符的出现次数.c_str()返回一个const char*,你不应该简单地抛弃它const.

  • 是的,在所有情况下,通过非`constst`引用/指针修改`const`变量会导致UB.这可能只是这次尝试的一个问题. (3认同)