没有格式说明符的snprintf()?

Raj*_*Raj 1 c printf

我正在编写这样的代码snprintf():

char myId[10] = "id123";

char duplicateId[10] = "";

snprintf(duplicateId, 10, myId);
Run Code Online (Sandbox Code Playgroud)

如您所见,我没有明确指定格式说明符%s.

我是否需要在上面的snprintf()语句中明确指定格式说明符snprintf(duplicateId, 10, "%s", myId);

小智 7

不,技术上你没必要.但这样做更好,因为没有常量格式字符串,您的格式字符串仍然可以修改,因此您的代码更容易格式化字符串攻击.

啊,并且还使用sizeof(duplicateId)而不是常量10- 也出于安全原因(为了避免在更改sprintf的输出缓冲区的大小时将来的缓冲区溢出).