오류, 버그, 질문 - 페이지 3011

 
A100 :

4번째 매개변수 때문에

처음 3자를 복사해야 합니다. 전체 문자열(후행 0을 포함하여 7자)을 복사해야 하는 경우 -1을 지정합니다. 부분적으로 복사가 불가능한 경우 이 매개변수가 필요한 이유는 무엇입니까?

이 옵션은 하위 문자열로 복사할 문자 수를 지정하지 않습니다.
그리고 배열에 전송되는 문자의 크기를 지정하기 위해.
저것들. 이것은 전송된 데이터의 크기에 대한 엄격한 보안 검사입니다.
이 크기에 따라 동적 배열 메모리가 자동으로 할당됩니다.

문자열에서 세 개의 요소를 복사해야 하는 경우 먼저 문자열에서 가져와야 합니다.
전송하는 금액의 크기를 지정하면서 이미 전송합니다.

 
Roman :

이 옵션은 하위 문자열로 복사할 문자 수를 지정하지 않습니다.
그리고 배열에 전송되는 문자의 크기를 지정하기 위해.
저것들. 이것은 전송된 데이터의 크기에 대한 엄격한 보안 검사입니다.
이 크기에 따라 동적 배열 메모리가 자동으로 할당됩니다.

문자열에서 세 개의 요소를 복사해야 하는 경우 먼저 문자열에서 가져와야 합니다.
전송하는 금액의 크기를 지정하면서 이미 전송합니다.

그거 맞아?

 StringToCharArray (InputText,scr, 0 , StringLen (InputText));
 
Vitaly Muzichenko :

그거 맞아?

플러스 1은 종료 0의 크기입니다.
StringLen 은 0을 제외한 크기를 반환합니다.

 char ch[];
string InputText = "ABCDEF" ;
int     size      =   StringLen (InputText) + 1 ;
    
StringToCharArray ( InputText, ch, 0 , size);
Print ( GetLastError ()); //0
 
Roman :

플러스 1은 종료 0의 크기입니다.
StringLen 은 0을 제외한 크기를 반환합니다.

나는 개발자로부터 예를 들었고 작동합니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

라이브러리: 해시 함수 라이브러리 및 다른 숫자 체계로의 변환

일리아스 , 2021.03.04 15:12

StringToArray 함수는 (역사적으로) 문자열의 길이를 지정하지 않으면 종료 null을 캡처합니다.

따라서 CryptDecodeA 함수에서 다음을 사용해야 합니다.

 StringToCharArray (InputText,scr, 0 , StringLen (InputText));

대신에

 StringToCharArray (InputText,scr);

 
Vitaly Muzichenko :

나는 개발자로부터 예를 들었고 작동합니다.


이 질문 에서는 라이브러리 사용을 의도하지 않았습니다.))
이것이 도서관의 뉘앙스입니다.

 
Roman :

플러스 1은 종료 0의 크기입니다.
StringLen 은 0을 제외한 크기를 반환합니다.

그리고 StringToCharArray가 문자열 유형에서 문자열 길이를 추출할 수 없는 이유는 무엇입니까(특히 MQL에서 계산할 필요가 없기 때문에) 추가 매개변수의 형태로 외부 도움이 필요합니까? 그렇다면 왜 다른 MQL 기능에는 그렇게 엄격한 " sish check" 검사가 없는 것일까요?

 
A100 :

그리고 StringToCharArray가 문자열 유형에서 문자열 길이를 추출할 수 없는 이유는 무엇입니까(특히 MQL에서 계산할 필요가 없기 때문에) 추가 매개변수의 형태로 외부 도움이 필요합니까? 그렇다면 왜 다른 MQL 기능에는 그렇게 엄격한 검사가 없을까요?

이 질문은 더 이상 나를 위한 것이 아니라 개발자를 위한 것입니다.
그러나 이 매개변수에 따라 동적 배열 의 메모리 크기가 할당됩니다.
즉, 배열의 메모리를 직접 할당하지 않는 것이 편리합니다.
플러스 및 정확성을 확인하십시오.
추가 크기 매개변수는 sya의 강력한 보안을 위한 표준 관행입니다.
크기가 필요하지 않은 다른 기능에서는 이 매개변수가 존재하지 않습니다.
일반적으로 이 매개변수는 배열로 작업할 때 메모리를 할당하는 데 사용됩니다.
이 경우 어떻게 됩니까?

 
Roman :

이 질문은 더 이상 나를 위한 것이 아니라 개발자를 위한 것입니다.
그러나 이 매개변수에 따라 동적 배열 의 메모리 크기가 할당됩니다.
즉, 배열의 메모리를 직접 할당하지 않는 것이 편리합니다.
플러스 및 정확성을 확인하십시오.

정확성 검사는 무엇입니까? - 여기, 내가 0을 지정했다고 가정해 봅시다 - 분명히 잘못된 값

 void OnStart ()
{
     uchar ch[];
     const string text = "ABCDEF" ;
     Print ( StringToCharArray ( text, ch, 0 , 0 ));
}

모든 것이 정상적으로 복사되었습니다. 결과: 7 - 오류 없음

 
A100 :

정확성 검사는 무엇입니까? - 여기, 내가 0을 지정했다고 가정해 봅시다 - 분명히 잘못된 값

모든 것이 정상적으로 복사되었습니다. 결과: 7 - 오류 없음

기능 설명에 트릭이 있습니다))

count=- 1

[in]  Количество элементов массива для копирования. Определяет длину результатной строки. 
По умолчанию - 1 , что означает копирование до конца массива, либо до встречи терминального 0 . 
Терминальный 0 также будет скопирован в массив-приемник, при этом размер динамического массива может быть увеличен при необходимости под размер строки . 
Если размер динамического массива больше длины строки, то размер массива уменьшен не будет. 

자동 진행
사용자에게 더 혼란스러운 것입니다.

 
Roman :

이 옵션은 하위 문자열로 복사할 문자 수를 지정하지 않습니다.
그리고 배열에 전송되는 문자의 크기를 지정하기 위해.

참조는 이 해석에 동의하지 않습니다.

복사할 배열 요소의 수입니다. 결과 문자열의 길이를 지정합니다. 기본값은 -1이며 이는 배열의 끝으로 복사하거나 터미널 0을 만날 때까지를 의미합니다. 터미널 0도 대상 배열로 복사되지만 필요한 경우 동적 배열의 크기를 늘릴 수 있습니다. 문자열의 크기. 동적 배열의 크기가 문자열의 길이보다 크면 배열의 크기는 줄어들지 않습니다.

물론 atas에 대한 설명 - 문자열은 배열, 배열은 문자열, 혼동 및 혼동이라고 합니다.

복사할 배열 요소(문자열)의 수입니다. 결과 문자열(배열)의 길이를 지정합니다. 기본값은 -1이며, 이는 배열(문자열)의 끝으로 복사하거나 터미널 0을 만날 때까지를 의미합니다.