"double"을 문자열로 변환하는 두 가지 함수 인 sprintf와 snprintf를 사용하고 있습니다. 하나의 경우, 실행중인 응용 프로그램의 로켈이 Windows 로켈과 다릅니다. 그래서, sprintf가 고려하는 로케일은 항상 응용 프로그램입니다. 반면 snprintf는 Windows 로켈을 사용하기 시작합니다. 결과적으로 두 메소드에서 리턴 된 소수 문자가 서로 다르고 문제가 발생합니다.C++ : sprintf는 어떤 로케일을 고려합니까?
자세한 내용을 보려면 "double"에서 문자열을 만드는 라이브러리가 있습니다.이 라이브러리는 snprintf를 사용하여 double을 문자열로 변환합니다. 그런 다음이 정보를 "이해할 수있는 서버에 보내야합니다." (점)은 십진 기호로만 사용됩니다. 따라서 지역 소수점 문자를 "."로 대체해야합니다. (점). 지역 소수점 문자를 찾으려면 (대체하기 위해) sprintf를 사용하는 프로젝트에서 제공되는 라이브러리 중 하나를 사용하고 있습니다. 그런 다음이 문자를 점으로 대체하여 최종 출력을 얻습니다.
또한 sprintf는 항상 네이티브 응용 프로그램의 로캘을 고려하지만 snprintf는 Windows의 로캘을 고려하는 경우가 있습니다. 문제가 불일치하므로 명확한 예를 제공하지 않아서 유감입니다.
따라서 snprintf가 다르게 동작 할 수있는 상황은 무엇입니까? 왜 이러한 두 가지 방법으로 인해 다른 동작이 발생합니까? 어떻게 피할 수 있습니까?
P. -이 두 가지 방법을 사용해야하므로 다른 방법을 사용하지 않아도되는 솔루션을 제안하십시오.
감사합니다.
'sprintf'와'snprintf' 모두 실제 서식에 대해 동일한 코드를 사용하기 때문에 서로 다르게 행동해서는 안됩니다. 문제를 보여주는 [Minimal, Complete, Verifiable Example] (http://stackoverflow.com/help/mcve)를 제공해 주시겠습니까? –
죄송합니다. 문제가 불일치하므로 Verifiable 예제를 제공해 드릴 수 없습니다. 하지만 간단히 설명하면 코드에서 정확히 무엇을하고 있는지 알 수 있습니다. 내 게시물을 편집했습니다. 감사. – Prasad
@Prasad : 요점은 세 가지 예가 있습니다. 하나는 Minimal, 하나는 Complete이며 마지막은 Verifiable입니다. – MSalters