我使用sprintf()格式化了一个字符串,如下所示:
int wValue = 1;
ostringstream ossi1;
ossi1 << "messageContent";
std::string orinal = "this is la large string \n
containin large content separated \n
by newline character"
char buff[50000] = {};
sprintf(buff, "What: %d @ Message: %s @ Detail: %s", wValue, ossi1.str().c_str(), orinal.c_str());
std::string myString(buff);
经过一番手术后
我得到char *如下:
char* varCharPointer = myString.c_str();
我尝试使用sscanf()分隔该字符串,如下所示:
int varWhat;
char* strMesg = NULL;
char* strCall = NULL;
if(sscanf(varCharPointer, "What: %d @ Message: %s @ Detail: %s", &varWhat, strMesg, strCall) == 3)
{
// here tried to print the values of varWhat, strMesg and strCall but
// im aunable to print/get that value.
}
sscanf()的返回值必须为3,但它给出1.任何人都告诉我上述意外行为的原因是什么? 提前谢谢。
答案 0 :(得分:0)
scanf和它的变体不起作用。例如,%s只能匹配没有空格的字符串 - 所以它肯定不会在orinal上工作,如果“messageContent”是带空格的字符串的替代,它可能不在ossi1上。
最好使用scanf进行极其简单的解析 - 例如“%d”在开头读取一个整数,几乎从不读取字符串,除非它们绝对不能包含空格。
最后,您需要创建strMesg和strCall缓冲区 - scanf不会分配内存。我很惊讶它没有立即崩溃。
答案 1 :(得分:0)
您需要为strMesg和strCall分配内存,或使用char数组