Üzerinde çalıştığım uygulamada, günlük kaydı, dosyaya yazılan metni biçimlendirmek için sprintf
kullanır. Yani, böyle bir şey: gönderilen alır ileti el ayrılan tampon için çok büyük olduğundaElle ayrılmış arabelleği olmayan sprintf'i kullanma
char buffer[512];
sprintf(buffer, ...);
Bu bazen sorunlara neden olmaktadır.
Bu şekilde el ile bellek ayırmak zorunda kalmadan sprintf
davranışı almanın bir yolu var mı?
DÜZENLEME: sprintf
C operasyonu yaparken, ben (! Vardır varsa) bana bu tür davranışlara ...
snprintf(), ne kadar alana ihtiyacınız olduğunu söyler, bu nedenle ihtiyacınız olduğunda iki kez kullanabilirsiniz, ilk kez gösterildiği gibi bir statik tampon ve ikinci kez dinamik olarak ayrılmış bir arabelleğe sahip olabilirsiniz. İkinci öneri için –
-1 (arabellek boyutunu ikiye katlama. Maksimum dize uzunluğunu bilmediğinizden, bir milyar ile çarpsanız bile taşmayacağını garanti edemezsiniz.) – finnw