如何获得字符串的总内容

How to get total content of string?

本文关键字:何获得 字符串      更新时间:2023-10-16

我已经将一个printf格式的字符串传递给一个函数,并尝试通过使用sscanf()来分离该字符串的内容。但下面是使用这个函数的问题。我以如下方式调用了这个函数:

int var = -1;
ostringstream ossi;
ossi << "myContent";
std::string detailString = "my first line n
                            the secon dline content is alos present n
                             also we are also get s sdjhf sf"
myFunction("What value: %d n  My content: %s n Detail Content: %s", var, ossi.str().c_str(),  detailString.c_str());

实现如下:

void myFunction(const char * format, ...)
{
    int var;
    char myContent[10000];
    char detailContent[50000];
    if (sscanf(myString, "What value: %d n My content: %s n Detail Content: %s", &var, cmyContent, detailContent) == 3)
    {
      std::cout<<" #### "<<std::endl;
      std::cout<<"var value is :"<<var<<std::endl;
      std::cout<<"My content is :"<<myContent<<std::endl;
      std::cout<<"detailContent is :"<<detailContent<<std::endl;
      std::cout<<" #### "<<std::endl;
    }
}

用上面的函数输出如下:

var value is : -1
My content is : myContent
detailContent is : my first line 

而不是获取第三个参数(i)的全部内容。(例如detailContent),它只得到第一行。对于获取字符串的完整内容有什么建议吗?提前感谢。

C和c++中的变量参数并不像你想象的那样工作。有关如何使用变量参数的教程,请参阅此链接。

或者查看stdarg的手册页

我猜你想做的是:

char buf[1024] = {};
sprintf(buf, "What value: %d n  My content: %s n Detail Content: %s", var, ossi.str().c_str(),  detailString.c_str());
myFunction(buf); // not using variable arguments at all

即使这样,函数也可能不会做你想做的事情。为了得到更好的答案,请写下你想要达到的目标。

注意:不鼓励在c++中使用sprintfsscanf,因为它们不安全