我有一個C
應用程序(不使用C99功能),它會執行一些重字符串處理。由於字符串長度未知,因此靜態分配的緩衝區不適用於我。我創建了一個簡單的string
實現,它將抽象緩衝區的空終止和動態擴展。將格式化支持添加到自定義字符串實現 - C
這裏是如何的樣子,
struct strbuf {
char *buffer; /* null terminated buffer */
size_t length; /* length of the string excluding null terminator */
size_t allocated; /* total memory allocated */
};
add
功能,增加了提供的字符串到緩衝區中。
int strbuf_add(struct strbuf *string, const char *c)
{
if(string == NULL) return 0;
while(*c != '\0') {
if(!add_char(string, *c++))
return 0;
}
return 1;
}
static int add_char(struct strbuf *string, char c)
{
size_t space_available;
assert(string != NULL);
space_available = string->allocated - string->length;
if(space_available <= 1) {
if(!grow_buffer(string)) {
return 0;
}
}
string->buffer[string->length++] = c;
string->buffer[string->length] = '\0';
return 1;
}
現在,我需要添加一個新的方法類似,addformatted
將採取類似的格式sprintf
。我想知道什麼是最好的方法來做到這一點?以下是我的想法。
- 使用
vsnprintf
。但我不確定這是否便攜並且在所有平臺上都具有相同的行爲。 - 我自己寫一個格式解析器。但這似乎是更多的工作。
任何幫助實施這將是偉大的。我只對便攜式解決方案感興趣。
- 開發信封:Linux下用GCC
- 預計彙編MSVC
至少snprintf應該是便攜式的。 – 2010-10-09 07:48:48
C中的重串處理?你不能使用awk或perl嗎? – Nyan 2010-10-09 08:00:55
3.編寫一個函數,將你的粘性事物插入到sprintf控制字符串中,然後將展開的控制字符串和附加參數傳遞給* printf。提示:可變參數。但是Nyan與它掛鉤:使用適合於具有真實字符串的任務的語言作爲實際類型。 – msw 2010-10-09 08:19:07