我需要使用linux函數ssize_t write(int fd, const void *buf, size_t count);
打印「word = n」(其中n在[0..10])中進行流式處理的函數。試圖使用fprintf,但它給出了奇怪的結果:程序在約1%的調用「woword = n」中打印,並且length
例如「woword = 7」是7. Printf打印完好。我做錯了什麼,或者這是包?與printf和fprintf不同的結果
if ((id_result = open(out , O_WRONLY)) <= 0) {
fprintf(stderr, "%s : %s\n", currentDateTime().c_str(), "could not open output\0");
ret = P_STREAMS_LOAD_ERROR;
}
void printProbability(int probability){
char buf[50];
memset(buf, '\0', 50);
int length = sprintf(buf, "word=%i\n\0", probability);
fprintf(stderr, "debug : word=%i len = %i\n\0", probability, length);
int result = write(id_result, buf, length);
if(result == -1){
fprintf(stderr, "%s : %s\n", currentDateTime().c_str(), "error \n");
}
}
EDITED:
我所理解的,我們有2個theorys: 1)混合printf和寫 2)fprintf中使用 '\ 0' 和 '\ N'
int length = sprintf(buf, "word=%i", probability);
int result = write(id_result, buf, length);
write(id_result, "\n", 1);
用這段代碼我仍然有同樣的錯誤
aa幫我:))
你的C++代碼看起來很像C.如果你使用C++的類來處理字符串,流,文件等,你可能不會遇到這個問題。也沒有任何你會遇到的主要問題。 – Biffen 2015-02-11 17:19:34
不需要在字符串末尾放置'\ 0',編譯器自動添加它。 – 2015-02-11 17:22:25
您正在混合行緩衝和非行緩衝I/O。 – 2015-02-11 17:25:55