2013-08-12 30 views
9

Tôi không thể in double giá trị sử dụng wsprintf(). Tôi đã thử sprintf() và nó hoạt động tốt.Cách in hai lần bằng wsprintf

Cú pháp sử dụng cho wsprintf()sprintf() là như sau:

wsprintf(str,TEXT("Square is %lf "),iSquare); // Does not show value 

sprintf(str," square is %lf",iSquare); // works okay 

Tôi có thực hiện bất kỳ sai lầm khi sử dụng wsprintf()?

+0

Có phải 'str' là chuỗi ký tự không? – shf301

+0

'TEXT' là gì? –

+1

@PascalCuoq: Trong ngữ cảnh này, macro Windows (Microsoft) mở rộng thành 'L'. Thay vì tiết và dễ bị lỗi. – MSalters

Trả lời

26

wsprintf không hỗ trợ dấu phẩy động. Sai lầm là sử dụng nó cả.

Nếu bạn muốn một cái gì đó như sprintf, nhưng đối với các ký tự/chuỗi rộng, bạn muốn swprintf thay thế. Nếu bạn đang sử dụng macro TEXT, có thể bạn muốn _stprintf thay vào đó: nó sẽ chuyển từ triển khai hẹp sang rộng đồng bộ với các macro tiền xử lý giống như TEXT sử dụng để quyết định xem chuỗi có bị thu hẹp hay không hoặc rộng.

Đối với giá trị của nó: wsprintf gần như hoàn toàn là di tích lịch sử. Các w dường như là viết tắt của Windows. Nó được đưa vào như một phần của Windows khi quay trở lại (khi quay lại ít nhất là Windows 2.1, có thể là Windows 1). Nó được viết mà không có hỗ trợ cho điểm nổi vì lúc đó, Windows đã không sử dụng bất kỳ điểm nổi bên trong (ở tất cả).

+0

Heck, nó chạy trên khá một vài hệ thống mà không có phần cứng điểm nổi ở tất cả. Ngay cả Windows 95 hỗ trợ 80386 mà không có một FPU 387. – MSalters

+0

Có, Nó hoạt động. Tôi đã sử dụng "_stprintf_s" phương pháp này là chính xác những gì tôi muốn. Cảm ơn bạn đã giúp đỡ. https://msdn.microsoft.com/en-us/library/ce3zzk1k.aspx –

-1

Có lẽ bạn không được biên soạn sang UNICODE và TEXT được định nghĩa #d chỉ thành chuỗi thông thường.

+0

Tôi đã bỏ phiếu kể từ khi câu trả lời sai. Nhưng nó không giống như bạn đặt nhiều nỗ lực vào việc tìm hiểu về 'wsprintf()'. – tinman

+1

Bạn đúng, tôi không nghiên cứu wsprintf. Rõ ràng OP cũng không. Tôi đoán và tôi đã sai; Tôi sẽ để lại cho hậu thế. – mark

2

wsprintf không hỗ trợ dấu phẩy động. Xem documentation - lf của nó không được liệt kê dưới dạng mã định dạng hợp lệ.

Phần chức năng swprintf của thư viện chuẩn Visual Studio là những gì bạn muốn. Nó hỗ trợ tất cả các mã định dạng mà sprintf thực hiện.

2

Chức năng wsprintf() không hỗ trợ thông số dấu phẩy động, hãy thử sử dụng swprintf() thay vào đó nếu bạn đang làm việc với các giá trị dấu phẩy động.

Bạn có thể tìm thêm thông tin về swprint here

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