2011-05-05 137 views
0

我有一個要求,C代碼從數據庫中提取字符串數據並將其寫入文件。在數據庫中的字符串數據可以有什麼樣的角色顯示C中的特殊字符

例如:描述字段有數據「調\ 342 \ 200 \ 223數據」,當我寫的文件中的文本寫入爲「調整數據」。同樣,這個描述字段可以有任何種類的數據,我的代碼只是讀取並使用strcpy從數據庫中提取並寫入文件後。

如何獲取寫入文件的數據,因爲它在描述字段中?

回答

2

認爲最簡單的辦法將被寫入逐字節 - 不應該管那麼多了具有緩衝:

int pos = 0; 
FILE *fp = 0; 
//... 
fp = fopen("somefile.txt", "w"); 
//... 
while(buffer[pos]) 
    if(buffer[pos] < 32 || buffer[pos] > 127) // change bounds for non-printable chars as you like 
     fprintf(fp, "%c", buffer[pos++]); 
    else 
     fprintf(fp, "\\%u", buffer[pos++]); 

編輯: 可能誤會了你的問題。實際使用字符串時僅使用字符串函數。對於二進制數據使用二進制功能(例如提到的memcpy())。

編輯2/3: 請勿將值打印爲「%d」或「%u」 - 應將「%3o」打印爲3位八進制數。如果其他數字在後面,使用「%o」可能是不安全的。

+0

打敗我,但這是一個很好的解決方案。作爲給提問者的一個提示,如果你想寫一個文件,你也可以使用fprintf,並且第一個參數變成FILE *,這樣你就可以執行fprintf(file,「%c」,buffer [pos ++]); - 這樣你就不需要用繩子打印或任何東西混雜。 – 2011-05-05 09:30:12

+0

好的表現也是我需要考慮的事情之一,因爲我會提取大量的數據,並且我無法通過每個字段和每個字符來解決這個問題,請注意。 – dicaprio 2011-05-05 09:30:17

+0

這真的取決於你想要做什麼。如果您只是想將數據寫入文件並能夠讀取該文件,則不需要「轉義」任何不可打印的字符或任何內容。如果我真正在做的是你想要的東西,我不認爲有更快的方法(因爲任何實現都會逐個角色)。您可以使用額外的緩衝區,但文件緩存應該使其過時。 – Mario 2011-05-05 09:32:37