在sprintf中使用strlen

时间:2015-02-23 10:39:44

标签: printf strlen

使用类似的东西是安全的: (当限制是这样的时候,不会写入超过512个字符,尽管应该在这里进行检查。)

char buffer[512]
memset(buffer, '\0', sizeof(char)*512)
for(int i=0; i<limit; i++)
{
    sprintf(buffer + strlen(buffer), "%d,",i);
}

我很好奇这种可能的短暂影响。

此致

1 个答案:

答案 0 :(得分:0)

是的,这是安全的。

在C中,在调用函数之前计算参数,这意味着在sprintf开始编写之前将计算缓冲区+ strlen(缓冲区)。

但有一点,你在设置缓冲区的同时使用sizeof(char),但在移动指针时不要检查sizeof(char)。您可以使用:

buffer + sizeof(char) * strlen(buffer)

&buffer[strlen(buffer)]

PS。但是,假设sizeof(char)== 1是相当安全的,所以你的代码没有错,只是不一致。