我正面临着sprintf的一个严重问题.
假设我的代码片段是:
sprintf(Buffer,"Hello World");
sprintf(Buffer,"Good Morning");
sprintf(Buffer,"Good Afternoon");
.
.
.
Run Code Online (Sandbox Code Playgroud)
几百个短跑......
如果我这样做,它会被覆盖.
如何避免使用sprintf覆盖.如果我在最后给出printf,我想看到所有的线条.
小智 101
你需要:
sprintf(Buffer,"Hello World");
sprintf(Buffer + strlen(Buffer),"Good Morning");
sprintf(Buffer + strlen(Buffer),"Good Afternoon");
Run Code Online (Sandbox Code Playgroud)
当然,你需要你的缓冲区足够大.
Mat*_*ler 64
int length = 0;
length += sprintf(Buffer+length, "Hello World");
length += sprintf(Buffer+length, "Good Morning");
length += sprintf(Buffer+length, "Good Afternoon");
Run Code Online (Sandbox Code Playgroud)
这是一个对错误有抵抗力的版本.如果您在发生错误时不关心它,只要您可以继续沿着您的快乐方式行事,这将非常有用.
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"));
Run Code Online (Sandbox Code Playgroud)
Ole*_*aev 29
为安全起见(缓冲区溢出)我建议使用snprintf()
const int MAX_BUF = 1000; char* Buffer = malloc(MAX_BUF); int length = 0; length += snprintf(Buffer+length, MAX_BUF-length, "Hello World"); length += snprintf(Buffer+length, MAX_BUF-length, "Good Morning"); length += snprintf(Buffer+length, MAX_BUF-length, "Good Afternoon");
Mic*_*urr 12
一个snprintfcat()包装snprintf():
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;
}
Run Code Online (Sandbox Code Playgroud)
使用返回值 sprintf()
Buffer += sprintf(Buffer,"Hello World");
Buffer += sprintf(Buffer,"Good Morning");
Buffer += sprintf(Buffer,"Good Afternoon");
Run Code Online (Sandbox Code Playgroud)
小智 5
我发现以下方法效果很好。
sprintf(Buffer,"Hello World");
sprintf(&Buffer[strlen(Buffer)],"Good Morning");
sprintf(&Buffer[strlen(Buffer)],"Good Afternoon");
Run Code Online (Sandbox Code Playgroud)
小完整代码示例
仅使用 flat plain stdio标准库
#include <stdio.h>
int main()
{
char c[1024];
int i=0;
i+=sprintf(c+i,"We " );
i+=sprintf(c+i,"Love " );
sprintf(c+i,"Coding");
printf("%s",c);
}
Run Code Online (Sandbox Code Playgroud)
输出:我们热爱编码