我正面临着一个关于sprintf
的严重问题。
假设我的代码片段是:
sprintf(Buffer,"Hello World");
sprintf(Buffer,"Good Morning");
sprintf(Buffer,"Good Afternoon");
.
.
.
上百次冲刺...
如果我喜欢这样,它就会被覆盖。
如何避免使用sprintf
覆盖?如果我在最后给出一个printf
,我想看到所有的行。
发布于 2010-04-20 18:39:42
您需要:
sprintf(Buffer,"Hello World");
sprintf(Buffer + strlen(Buffer),"Good Morning");
sprintf(Buffer + strlen(Buffer),"Good Afternoon");
当然,你需要你的缓冲区足够大。
发布于 2010-04-20 18:41:57
int length = 0;
length += sprintf(Buffer+length, "Hello World");
length += sprintf(Buffer+length, "Good Morning");
length += sprintf(Buffer+length, "Good Afternoon");
这是一个对错误有一定抵抗力的版本。如果你不关心什么时候发生错误,这是很有用的,只要你能在错误发生的时候继续你的快乐之路。
int bytes_added( int result_of_sprintf )
{
return (result_of_sprintf > 0) ? result_of_sprintf : 0;
}
int length = 0;
length += bytes_added(sprintf(Buffer+length, "Hello World"));
length += bytes_added(sprintf(Buffer+length, "Good Morning"));
length += bytes_added(sprintf(Buffer+length, "Good Afternoon"));
发布于 2010-04-21 01:10:09
snprintf()
的snprintfcat()
包装器
size_t
snprintfcat(
char* buf,
size_t bufSize,
char const* fmt,
...)
{
size_t result;
va_list args;
size_t len = strnlen( buf, bufSize);
va_start( args, fmt);
result = vsnprintf( buf + len, bufSize - len, fmt, args);
va_end( args);
return result + len;
}
https://stackoverflow.com/questions/2674312
复制相似问题