- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
<分区>
我无法找到以下问题的答案,而且我有一些与功能相关的问题。
我的主要编程是用C#完成的,在学习的时候并没有真正学过C++,但在我现在的工作中我也必须做一些C++编程。
大部分 C++ 编程都是由一位前雇员完成的,他制作了一个日志记录功能。
偶尔这个函数会导致错误(访问冲突)——这不会向用户显示,但我在通过调试器运行代码时看到了它。
当错误发生时它指向这行代码:
vfprintf( LogFile, fmt, va );
然后我仔细查看了之前和之后的代码,将上面的内容放在上下文中,代码是:
void FileLog( char *fmt, ... )
{
va_list va;
struct time t;
struct date d;
long clk;
static int ReEntrant = 0;
if( FileLogEnabled == false )
return;
ReEntrant++;
if( ReEntrant > 1 )
return;
if( LogFile == NULL )
LogFile = fopen( LogFileName, "a+" );
if( LogFile != NULL )
{
gettime( &t );
getdate( &d );
fprintf( LogFile, "\n%d-%02d-%02d %2d:%02d:%02d.%02d0> ", d.da_year, d.da_mon, d.da_day, t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund );
va_start( va, fmt );
vfprintf( LogFile, fmt, va );
va_end( va );
fflush( LogFile );
...
}
ReEntrant = 0;
}
实际上我不明白为什么需要它(如果需要的话?)同时调用 fprintf 和 vfprintf?我认为第一个 fprintf 调用会将格式化的字符串写入流(文件),这就足够了吗?
一点解释或一些信息将不胜感激:)
编辑: 在 nos 的评论之后 - 我追踪到今天经常导致此错误的函数的特定调用。
FileLog( "TimerRestore[%d], Name=%s", Package.CurGame->Timers[ Index ].Name.c_str() );
我确实认为这可能会引起一些麻烦,因为“TimerRestore[%d],Name=%s”后面应该跟一个十进制和字符串参数,但是只给出了一个字符串参数。我需要做一些测试,但我确定编写这段代码的作者的意思是:
FileLog( "TimerRestore[%d], Name=%s", Index, Package.CurGame->Timers[ Index ].Name.c_str() );
但是我仍然不明白为什么函数调用似乎并不总是导致错误。或者可能是 FileLog 函数中的“ReEntrant”变量在它没有失败时阻塞它的原因?
非常感谢所有的反馈和信息。
我正在尝试围绕 vfprintf 函数编写一个包装器,但要求我想为格式说明符添加一个前缀,然后将新的格式说明符传递给 vfprintf. 现在我不知道该怎么做,但我已经在下面的代码中捕捉到了我的意图。
我遇到段错误并使用 gdb 和回溯,它在 vprintf 处抛出。 #0 0x006e8779 in vfprintf () from /lib/libc.so.6 #1 0x006f265f i
我有一个类: FILE *logFile = fopen("out.log", "w"); class Log { public: static void d(const char *mess
我正在尝试以下列方式使用 vfprintf vfprintf(fp,缓冲区,arg);我使用运行的日期和时间、缓冲区和其余参数创建的 fp 日志文件 fp = fopen(filename, "a")
Visual Studio 2008 我正在使用以下源代码,使用 linux gcc 4.4.1 编译正常。 但是,我正在尝试使用 VS 2008 编译为 c 代码在 windows xp sp3 上
我想用 vfprintf(FILE * stream, const char * format , va_list arg) 因为 fprintf 继承的膨胀。是否可以使用 vfprintf 而无
下面的程序遇到了段错误,我不知道是什么问题。 1 #include 2 #include 3 void writeformat(FILE*,char*, ...); 4 int mai
我在 C 中有一个可变参数函数,大致如下所示: void log(const char * format, ...) { va_list args; va_start(args, format
我有一个函数可以将 vsnsprintf 放入在堆栈上创建的对象的临时缓冲区中。 在对象的构造函数中,我将缓冲区的第一个字符初始化为空。 Valgrind 提示在 vfprintf.c 的堆栈上创建了
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我正在编写一个日志编写器,为此我正在 vfprintf 上编写一个包装函数,这样我就可以在它周围包含一些额外的信息。 日志写入宏定义如下: #define LOG_WRITE(type, fmt, a
我对 c++/linux 相当(非常)陌生,正在查看 glibc 中的 vfprintf 函数。它包括 REF (...) 的许多用途,我假设它是一个宏,但我无法在任何地方找到它的定义。我已经搜索了文
我正在修补一些旧代码(15-20 岁),我时常遇到奇怪的片段。这是一个让我挠头的问题。 27 void FormDefFileScanner::FormDefFileerror(char *fmt,
我是一名优秀的程序员,十分优秀!