文字列の書式化

printfに似た書式指定子を受け取り、書式化した文字列を指定の文字列へ連結する専用の関数があります。

sds sdscatprintf(sds s, const char *fmt, ...) {

例:

sds s;
int a = 10, b = 20;
s = sdsnew("The sum is: ");
s = sdscatprintf(s,"%d+%d = %d",a,b,a+b);

printfの書式指定子から、SDS文字列を直接作成したいこともよくあります。sdscatprintfは実際には文字列を連結する関数なので、空文字列へ連結するだけで作成できます。

char *name = "Anna";
int loc = 2500;
sds s;
s = sdscatprintf(sdsempty(), "%s wrote %d lines of LISP\n", name, loc);

sdscatprintfを使って、数値をSDS文字列へ変換できます。

int some_integer = 100;
sds num = sdscatprintf(sdsempty(),"%d\n", some_integer);

ただし、この方法は遅いため、効率良く処理するための専用関数を用意しています。

数値から文字列への高速変換

プログラムによっては、整数からSDS文字列を作ることがよくあります。sdscatprintfでもできますが、性能上の負担が大きいため、SDSには専用関数があります。

sds sdsfromlonglong(long long value);

次のように使います。

sds s = sdsfromlonglong(10000);
printf("%d\n", (int) sdslen(s));

output> 5