2015-02-23 29 views
-2

它可以安全使用的类似: (当限制所以没有更多然后512个字符都写过,但应检查放在这里)使用strlen里面的sprintf

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

我我对这种可能的瞬态效应感到好奇。

Regards,

回答

0

是的,它是安全的。

在C中,参数在函数被调用之前被评估,这意味着在sprintf开始写入之前将计算buffer + strlen(buffer)。

虽然有一种说法,您在memsetting缓冲区时使用sizeof(char),但在移动指针时不检查sizeof(char)。您可以使用:

buffer + sizeof(char) * strlen(buffer) 

或者

&buffer[strlen(buffer)] 

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