我的字体文件名提取器无效...
filename_:".\\Source\\AlexBrush-Regular.ttf"
我正在使用
sprintf(buffer, "\nFont Name:%s \nNumber of errors: %d\nAscent %d High +%d Descent -%d Low -%d!",
font->filename_.substr( font->filename_.find_last_of('\\'), font->filename_.length() ), hitcount, Ascent, Descent, High, Low);
我的输出看起来像
buffer 0x008aecbc "\nFont Name:ÀëŠ \nNumber of errors: 12688232\nAscent -858993460 High +-858993460 Descent --858993460 Low -22!"
答案 0 :(得分:1)
只需使用basename(font->filename_.c_str())
,它完全符合您的要求,并且与平台无关。
答案 1 :(得分:1)
我尝试用一个小例子重现你的问题:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string filename(".\\Source\\AlexBrush-Regular.ttf");
cout << filename.substr(filename.find_last_of('\\') + 1) << endl;
return 0;
}
输出为:
的 AlexBrush-Regular.ttf 强>
首先,我添加&#34; 1&#34;到第一个参数,因为函数 find_last_of()将搜索最后一个字符的位置,我不认为你想将它包含在输出中。
其次,我删除了第二个参数,因为默认值是string :: npos,它表示直到字符串结尾的所有字符。
如果您总是遇到问题,请更具体地了解您的需求。
答案 2 :(得分:1)
考虑到您正在使用stringstream
,使用C ++工具(即std::string
)而不是C工具来解决这个问题会更好。在这种情况下,请参阅this snippet here了解如何执行此操作。
如果您坚持使用sprintf
,则必须获取基础c-string
,您可以将其称为:
const std::string mystr("foo");
const char *mycstr(mystr.c_str());