【发布时间】:2009-10-07 15:28:42
【问题描述】:
我需要将字符串转换为 char * 以在 strtok_s 中使用,但一直无法弄清楚。 c_str() 转换为不兼容的 const char *。
另外,如果有人可以向我解释为什么第二个 strtok_s 函数(在循环内)是必要的,那将是一个很大的帮助。为什么我需要显式推进令牌,而不是例如它所在的 while 循环,它连续、隐式地获取文件的每一行。
while( getline(myFile, line) ) { // Only one line anyway. . . is there a better way?
char * con = line.c_str();
token = strtok_s( con, "#", &next_token);
while ((token != NULL))
{
printf( " %s\n", token );
token = strtok_s( NULL, "#", &next_token);
}
}
相关question。
【问题讨论】:
-
为什么在 C++ 字符串上使用 strtok()? C++ 为这类事情提供了更好的工具。
-
因为我不知道。你有什么建议?
-
参见stackoverflow.com/questions/53849/… 使用 Boost 的示例代码。
-
但是为什么这样更好呢?图书馆不会产生开销吗?
-
顺便说一下,C++ 字符串中间可以有 NUL 字符,因为 C++ 是根据一些字节和长度来定义字符串的,而不是 C 的“以 NUL 结尾的字节序列”。因此,如果您只知道输入是一个 C++ 字符串,那么像
strtok这样的 C 函数实际上不起作用,因为它们可能会在实际结束之前错误地检测到他们认为是字符串的结尾。