저는 MATLAB로 작성된 코드를 C로 포팅하려고합니다. 그래서 함수를 컴파일하고 더 빠르게 실행할 수 있습니다 (코드가 자주 실행되고 속도가 상당히 빨라집니다).sprintf를 사용하여 특정 위치에서 C의 char 배열에 쓰는 방법은 무엇입니까?
기본적으로 MATLAB 코드는 매트릭스를 사용하여 대괄호와 쉼표를 추가하여 문자열로 변환하므로 텍스트 파일에 쓸 수 있습니다.
이제MyVec = rand(1,5);
NbVal = length(MyVec)
VarValueAsText = blanks(2 + NbVal*30 + (NbVal-1));
VarValueAsText([1 end]) = '[]';
VarValueAsText(1 + 31*(1:NbVal-1)) = ',';
for i = 1:NbVal
VarValueAsText(1+(i-1)*31+(1:30)) = sprintf('%30.15f', MyVec(i));
end
, 어떻게 C에서 비슷한 결과를 얻을 수 있습니다 : 다음은이 벡터 MyVec을 위해 어떻게 작동하는지의 아이디어인가? 내가 문자열 (char 배열)의 크기를 미리 계산할 수 있고 기억 영역에 쓸 각 요소의 위치를 알고 있기 때문에 너무 어려워 보이지 않습니다. 또한 sprintf
함수가 C에 있습니다. 그러나 이것을 설정하는 방법을 이해하는 데 어려움이 있습니다. 시행 착오를 통해 쉽게 배울 수있는 환경이 없기 때문입니다 (재 컴파일해야 할 때마다 세분화 오류 및 MATLAB 충돌 ...).
일부 샘플 입력 (예 : 4 * 4 매트릭스)을 표시하면 상황이 더 쉬울 수 있습니다. (디스크상의 파일을 중간 저장 공간으로 사용 하시겠습니까? 아니면 메모리 내 인터페이스를 원하십니까?) 참고 : C에서 sprintf()는 첫 번째 인수로 문자열/버퍼를 가져야합니다. 이 부분에서 matlab이 매우 다른 것을 기대하지 마십시오. 주 2 : 결과 문자열에 구분 기호 (공백, 탭, 쉼표, 줄 바꿈)가없는 것 같습니다. – wildplasser
안녕하세요 & 답장을 보내 주셔서 감사합니다. 나는 당신의 의견을 이해할 수 있는지 모르겠다 : 넣어 코드를 내가 C로 포트에 노력하고있어 MATLAB 현재 (작업) 코드입니다. 사실, 첫 번째 줄을 추가했습니다. 임의의 입력)를 샘플 입력으로 사용합니다. 결국 VarValuesAsString에서 "형식화 된 값"을 얻습니다. – Federico
mathlab에 대해 아무것도 모릅니다. 결과 문자열이'[val1, val2, val3, ...]'이 되길 원하는 것처럼 보이지만 이것이 맞습니까? – wildplasser