2015-12-17 18 views
6

Điều này chỉ xảy ra với tôi trong khi thử nghiệm một phần của chương trình lớn hơn mà tôi đã bị cô lập. Chức năng ban đầu sẽ loại bỏ ký tự ascii không từ một chuỗi trong một cách đặc biệt mà tôi cần, vấn đề là chương trình nàyKhông có đầu ra khi sử dụng `fprintf 'sau` fwprintf'

sẽ không in thứ hai -- Example trên Linux của tôi (Fedora 22) Hệ thống
#include <stdio.h> 
#include <wchar.h> 

int main(int argc, char *argv[]) 
{ 
    fwprintf(stdout, L"-- Example\n"); 
    fprintf(stdout, "-- Example\n"); 

    return 0; 
} 

. Mặc dù sử dụng fwprintf() một lần nữa hoặc fprintf(stderr, "-- Example\n"); sẽ hoạt động.

  • Đây có phải là hành vi mong đợi không? Và tại sao?
+1

Hệ điều hành nào? – trojanfoe

+0

@trojanfoe Cập nhật các thẻ. –

+0

không hoạt động với MSVC. –

Trả lời

1

Tôi cho rằng vấn đề này có thể liên quan đến định hướng rộng của luồng tệp. Nếu không sử dụng fwide() thì định hướng của hàm tệp đầu tiên được sử dụng để xác định hướng (bạn cũng có thể đặt hướng khi mở tệp nhưng không áp dụng ở đây).

Khi luồng rộng, bạn cần sử dụng các chức năng rộng; và khi không rộng, bạn cần sử dụng các chức năng không rộng.

Sau khi định hướng được đặt, nó không thể thay đổi.

+0

Tôi đang đọc câu trả lời của bạn. Tôi đã cố gắng hoàn nguyên hướng rộng và, như bạn nói, nó không được phép thay đổi nó. Tôi không hiểu tại sao hành vi này lại bị áp đặt. Bạn có biết lý do của hành vi này? –

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