我想测试var字符串是否以' \ n'或不,以便从流异步套接字中检测和删除一些不完整的传入变量。以下代码似乎无法正常工作。为什么?
string var;
char *rest = nullptr;
char *pVar = nullptr;
istringstream iss(sReadBuffer); // Put into a stream
while (getline(iss, var)) // Default delimiter '\n' or EOF
{
int size = var.size();
pVar = _strdup(var.c_str()); // Cast string to char * for later use (strstr,...)
if(var[size] != '\n') // If incomplete variable found (not newline ended)...
{
debug("Incomplete variable found : ", pVar, "\n");
rest = pVar;
break;
}
//... proceed with variable normally if they are complete
答案 0 :(得分:2)
getline()
会丢弃换行符。如果要测试EOF,请测试stringstream
对象本身。
答案 1 :(得分:1)
var[size]
访问超出范围的字符串。但是您可以使用std::string::back
成员来获取对最后一个元素的引用。
if(var.back() != '\n')
这可以避免潜在的索引错误。上面的代码假定var
不为空。您可以查看std::string::empty()
。例如,
if((!var.empty()) && (var.back() != '\n'))
您希望在使用\n
读取的字符串中找到getline
是另一回事。