为什么这个sprintf语句崩溃了?

And*_*ewS 0 c++ format

char filebuf[256];
path current = current_path();
std::cout<<"CurrentWorking "<<current<<endl;
string _UserDir = "TTiTraceLogs";
sprintf(filebuf,"%s/%s",current,_UserDir); ///crashing here
Run Code Online (Sandbox Code Playgroud)

如果我只格式化current,那就没关系.

sprintf(filebuf,"%s",current);
Run Code Online (Sandbox Code Playgroud)

输出:

CurrentWorking D:/working/eclipse_projects/sadftp/CollectTTiTraceSept10_1009_174
_higher/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Release
Run Code Online (Sandbox Code Playgroud)

Aas*_*set 17

在标准sprintf()函数(和其他printf()函数)中,说明%s符不适用于C++ strings; 它只适用于C风格的字符串.尝试_UserDir.c_str(),它给你一个const char *指向内部数组,string因此可以用于许多C函数.

如果current_path()返回的东西是不是一个(可能const)指针char或者unsigned char,你需要将该值转换了.