使用类似的东西是安全的: (当限制是这样的时候,不会写入超过512个字符,尽管应该在这里进行检查。)
char buffer[512]
memset(buffer, '\0', sizeof(char)*512)
for(int i=0; i<limit; i++)
{
sprintf(buffer + strlen(buffer), "%d,",i);
}
我很好奇这种可能的短暂影响。
此致
答案 0 :(得分:0)
是的,这是安全的。
在C中,在调用函数之前计算参数,这意味着在sprintf开始编写之前将计算缓冲区+ strlen(缓冲区)。
但有一点,你在设置缓冲区的同时使用sizeof(char),但在移动指针时不要检查sizeof(char)。您可以使用:
buffer + sizeof(char) * strlen(buffer)
或
&buffer[strlen(buffer)]
PS。但是,假设sizeof(char)== 1是相当安全的,所以你的代码没有错,只是不一致。