我试图标记一个字符串,我有一些奇怪的行为.这是代码:
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]包含完全相同的字节?
strtok修改字符串,它用'\ 0' 替换分隔符的出现次数.c_str()返回一个const char*,你不应该简单地抛弃它const.