- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
#define printm(X) handleVarArgs X
void writeFile(std::string & s)
{
FILE *fp;
fopen("test.txt","w");
fputs( s.c_str(), fp );
fclose(fp);
}
void handleVarArgs( char* format, ...)
{
std::string s;
va_list args;
va_start (args, format);
vsprintf (const_cast<char *>(s.c_str()),format, args);
va_end (args);
writeFile(s);
}
const char * func() {
std::string errorLog("Kiev");
return errorLog.c_str();
}
int main()
{
printm(("My Name is %s and surname is %s and age is %d",func(),"john",25));
return 0;
}
如果我调用 writeFile() 函数,我会遇到段错误。但是当我删除 writeFile() 时没有段错误Files 和 Var Args 是什么关系?
最佳答案
您直接在 string.c_str()
中编写,只需使用 const_cast 删除其常量。这是不好的,会调用未定义的行为。所以接下来发生的只是undefined ...
handleVarArgs 的正确方法是:
sz+1
并迭代std::string
并使用它类似的东西:
void handleVarArgs( char* format, ...)
{
#define DEF_SZ 256
int sz = DEF_SZ;
std::string s;
while(1) {
char * buf = new char[sz];
va_list args;
va_start (args, format);
int l = vsnprintf (buf , sz, format, args);
va_end (args);
if (l < sz) {
s = buf;
writeFile(s);
delete[] buf;
return;
}
sz = l + 1;
delete[] buf;
}
}
关于c++ - 使用 vsprintf 和文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31744105/
__inline int my_sprintf (char *dest,char *format,...) { va_list va; va_start(va,format);
我已经编写了这段代码,但我不确定它是否可以。 size_t sendHeaders(int fd, int seconds, const char* header1, ...) { size_
现在,该程序的目标是通过变量参数列表获取四个名称,并使用 vsprintf() 将它们连接成一个名为“total”的字符串。目前的程序是,只有名字出现在字符串“total”中。请问我该如何解决这个问题
我正在为 HCS12 微 Controller 编写 C 代码,以与 LCD 屏幕连接,作为 Uni 作业的一部分,我遇到一个问题,如果我尝试使用 vsprintf 制作 printf 包装器,则会发
我在使用函数 vsprintf 时遇到问题。 我有 3 个函数来打开、关闭和写入 XML 文件。 open 函数将输入文本的第一个单词存储在数组中,close 函数用该单词关闭标签。问题是,我存储要使
我正在尝试为 cstdio 中的标准 sprintf 函数编写一些包装器。但是,我在运行我的程序时遇到了一些奇怪的行为和访问冲突崩溃。我简化了问题并在下面的代码中重现了它: #include #in
我需要将各种格式字符串打印到一个文件中。我将有与每个字符串关联的整数,与每个字符串中的格式说明符相同数量的整数。大多数字符串不会有相同数量的格式说明符/整数。 因此给定格式字符串 blah blah
因为这 1 行代码,我一直在抓狂。如果我不为 extra 动态分配内存(仅通过 char extra[*cur_size+1];),vsprintf 就会卡住。 char *append(char *
echo vsprintf('%s', 'word'); 根据手册,vsprintf() 函数的第二个参数必须是数组。 但这行得通,正常吗?这有时可能会导致一些错误? 最佳答案 $args 参数自动转
实例 把格式化字符串写入变量中: ? 1
下面的代码返回以下内容: Input was: 6789 Vsprintf Buffer: 54 为什么 vsprintf 缓冲区只返回 54? #include #include void vo
我正在尝试编写一个宏来简化 LOG4CPLUS 的使用。但是我在写宏的时候遇到了一些麻烦。 这是我的 cpp 文件中的内容: Logger logger = Logger::getInstance("
#define printm(X) handleVarArgs X void writeFile(std::string & s) { FILE *fp; fopen("test.tx
我正在为一个类实现一个类似 printf(const char * format, ...) 的方法,我需要确定它输出的确切大小,只给定提供的 format 和 va_list 中给出的参数,然后调用
我正在使用 vsprintf 从一种格式生成一个字符串,并且需要在记录它之前添加一个查找的前置字符串。下面的代码打印了格式字符串,但是我如何在前面加上另一个字符串呢?理想情况下以一种相当有效的方式。
我正在为 syslog 编写一个简单的包装器,使我的程序的日志记录更容易一些,并允许在选择时将日志条目转储到控制台。我定义了以下日志函数 void logDebugFunction (int li
我正在尝试使用 vsprintf() 来输出格式化字符串,但我需要在运行它之前验证我的参数数量是否正确,以防止出现“参数太少”错误。 本质上我认为我需要的是一个正则表达式来计算类型说明符的数量,但是当
vsprintf() 愉快地忽略了以下错误: // I'd like to tell me that there are too many arguments. vsprintf("%d", 1, 2
我试图将我得到的变量参数传递给我调用的另一个函数。我编写了一个示例代码来测试这一点。为什么下面的代码中 my_printf 可以工作,但 my2_printf 不能工作? #include #inc
n 变量的字符串插值通常涉及可变参数函数。在 C 中,是否有类似于 vsprintf 的替代方案,可以采用动态创建的字符串数组而不是 va_list? int foo (char *s, const
我是一名优秀的程序员,十分优秀!