2012-06-24 36 views
7

Tôi muốn làm điều gì đó như thế này:chức năng c quay trở lại định dạng chuỗi

writeLog(printf("This is the error: %s", error)); 

vì vậy tôi đang tìm kiếm một chức năng mà trả về một chuỗi định dạng.

+8

Tra cứu 'snprintf'. –

+1

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/ cho sprintf – Mark

+0

Xin lỗi, nhưng có vẻ như snprintf thực hiện khá giống với sprintf, đưa chuỗi được định dạng vào một biến. Những gì tôi đang tìm kiếm là một hàm trực tiếp trả về chuỗi được định dạng. – Zulakis

Trả lời

5

Không có chức năng như vậy, hãy xem xét một cách tiếp cận hơi khác: làm cho writeLog giống như printf, ví dụ: lấy một chuỗi và một số đối số thay đổi. Sau đó, có nó định dạng tin nhắn nội bộ. Điều này sẽ giải quyết vấn đề quản lý bộ nhớ, và sẽ không phá vỡ việc sử dụng hiện tại của writeLog.

Nếu bạn thấy thông tin này có thể, bạn có thể sử dụng một cái gì đó dọc theo những dòng:

void writeLog(const char* format, ...) 
{ 
    char  msg[100]; 
    va_list args; 

    va_start(args, format); 
    vsnprintf(msg, sizeof(msg), format, args); // do check return value 
    va_end(args); 

    // write msg to the log 
} 
+1

Cảm ơn vì cách tiếp cận tốt này. Chính xác những gì tôi đang tìm kiếm. – Zulakis

5

Không có chức năng như vậy trong thư viện chuẩn và sẽ không bao giờ có một chức năng trong thư viện chuẩn. Nếu bạn muốn, bạn có thể tự viết nó. Đây là những gì bạn cần phải suy nghĩ về: Ai sẽ phân bổ lưu trữ cho chuỗi trả về, và ai sẽ giải phóng nó? Nó có an toàn hay không? Sẽ có giới hạn về độ dài tối đa của chuỗi được trả về hay không?

Các vấn đề liên quan