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

 
fxsaber :

버그는 결과가 아니라 이 두 함수 간의 불일치입니다. count=0일 때 무엇을 출력할지 문서화하는 문제일 뿐입니다.

아니요, 획일성의 원칙 같은 것이 있습니다. 버그가 분명합니다. 그것이 왜 버그인지 이해하지 못한다면 그것은 당신만의 문제입니다.

 
fxsaber :

버그는 결과가 아니라 이 두 함수 간의 불일치입니다. count=0 일 때 무엇을 출력할지 문서화하는 문제일 뿐입니다.

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

오류, 버그, 질문

로만 , 2021.05.07 22:07

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

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

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

A100 :

그리고 실천가는 이론가들에게 그러한 모순된 결과를 어떻게 설명합니까?

결과: 4:0

예상: 0:0

또는 - 문서를 약간 수정하시겠습니까? 글쎄, 결국 버그를 수정하지 마십시오!

내 설명은 간단합니다. 이러한 표준 기능 중 하나에 버그가 있습니다.


 
Roman :

그 이후에는 개발자들이 이미 고쳤 으니 이전 설명은 좋지 않습니다.

기능 은 동일하고(실제로 템플릿의 유형만 다름), 설명은 동일하지만(상호 참조도 있음) 결과가 다릅니다.

 
A100 :

개발자가 이미 거기에서 수정 했으므로 이전 설명이 좋지 않습니다.

정확히 무엇이 수정되었습니까?
문서에서와 항상 동일했습니다.

str1

str1


수정된 사항을 확인하셨나요? ))
고정, 원하는 대로 분할합니다.
예를 들어 3자

 char ch[];
int str = StringToCharArray ( "ABCDEF", ch, 0 , 3 );
    
Print (" StringToCharArray "+( string )str);
Print ("ch[] ", CharToString (ch[ 0 ]), CharToString (ch[ 1 ]), CharToString (ch[ 2 ]));
Print (" GetLastError ", GetLastError ());         

2021.05 . 25 02 : 08 : 33.329 Test (AUDUSD,M1)   StringToCharArray 3
2021.05 . 25 02 : 08 : 33.329 Test (AUDUSD,M1)   ch[] ABC
2021.05 . 25 02 : 08 : 33.329 Test (AUDUSD,M1)   GetLastError 0

그러나 count 에 0을 전달하면 종료 0이 있는 전체 문자열이 자동으로 복사됩니다.
문자열이 비어 있어도 종료 0이 복사됩니다.

 char ch[];
int str = StringToCharArray ( "", ch, 0 , 0 );
    
Print (" StringToCharArray "+( string )str);
 2021.05 . 25 02 : 24 : 47.161 Test (AUDUSD,M1)   StringToCharArray 1
그리고 StringLen()은 종료 null을 반환하지 않음))
 
Roman :

정확히 무엇이 수정되었습니까?

그러나 count 에 0을 전달하면 종료 0이 있는 전체 문자열이 자동으로 복사됩니다.
문자열이 비어 있어도 종료 0이 복사됩니다.

그리고 StringToShortArray 에서 왜 다른가요? 가능하면 간단하게 과거의 훌륭한 설명(결국 지지할 수 없는 것으로 판명됨)에 대한 속임수와 이해할 수 없는 참조 없이 설명하십시오 - 간단한 방법으로 - 찻주전자에 대해

없이 ; ) 및 이 주제의 기타 부적절한 문자

 
A100 :

그리고 StringToShortArray 에서 왜 다른가요? 가능하면 간단하게, 과거의 훌륭한 설명(결국 지지할 수 없는 것으로 판명됨)에 대한 속임수와 이해할 수 없는 참조 없이 설명하십시오 - 간단한 방법으로 - 찻주전자

없이 ; ) 및 이 주제의 기타 부적절한 문자

분할 작품

 ushort sh[];
int str = StringToShortArray ( "ABCDEF", sh, 0 , 3 );
    
Print (" StringToShortArray "+( string )str);
Print ("sh[] ", ShortToString (sh[ 0 ]), ShortToString (sh[ 1 ]), ShortToString (sh[ 2 ]));
Print (" GetLastError ", GetLastError ()); 
2021.05 . 25 03 : 10 : 07.696 Test (AUDUSD,M1)   StringToShortArray 3
2021.05 . 25 03 : 10 : 07.696 Test (AUDUSD,M1)   sh[] ABC
2021.05 . 25 03 : 10 : 07.696 Test (AUDUSD,M1)   GetLastError 0

카운트 0 이 작동하지 않는지 모르겠습니다.
아마도 0 번 카운트 에 대한이 교활한 자동화는 여기에서 작동하지 않으며 도움말에 따르면 이것은 이미 불일치입니다.
그리고 아마도 실수일 것입니다.

 ushort sh[];
int str = StringToShortArray ( "ABCDEF" , sh, 0 , 0 );
    
Print ( "StringToShortArray " +( string )str);
//Print("sh[] ",ShortToString(sh[0]), ShortToString(sh[1]), ShortToString(sh[2]));
Print ( "GetLastError " , GetLastError ()); 
2021.05 . 25 03 : 12 : 00.176 Test (AUDUSD,M1)   StringToShortArray 0
2021.05 . 25 03 : 12 : 00.176 Test (AUDUSD,M1)   GetLastError 0

간단히 말해서, 또는 오류가 있습니까?   0을 세다   작동하지 않습니다,
또는 카운트 0에 있는 StringToCharArray의 오류
가 트리거됩니다.

설명의 일관성을 이해하려면 C 언어의 기초, 특히 문자열 작업을 배우십시오.
그러면 질문이 없을 것입니다.

 
Roman :

요컨대, 또는 실수가 있습니까 ?   0을 세다   작동하지 않습니다,
또는 카운트 0에 있는 StringToCharArray의 오류 가 트리거됩니다.

멋진!

 
A100 :

멋진!

확실히 훌륭합니다. 도움말은 작업 방법을 명시적으로 공개하지 않습니다.   0을 센다 .
그러나 머리를 켜면 배열의 크기가 0인 배열을 전달하고 메모리를 0으로 할당하는 것은 약간 이상합니다.
이에 따르면   count 0 은 문자열이 끝날 때까지 자동 크기 조정을 트리거합니다 .
논리적으로 StringToShortArray 도 작동해야 합니다.
크기 조정 없이 오류가 반환되면 더 좋을 것입니다.
 
Roman :
확실히 훌륭합니다. 도움말은 작업 방법을 명시적으로 공개하지 않습니다.   0을 센다 .
그러나 머리를 켜면 배열의 크기가 0인 배열을 전달하고 메모리를 0으로 할당하는 것은 약간 이상합니다.
따라서 카운트 0에서 줄 끝까지 자동 크기 조정이 트리거됩니다 .
논리적으로 StringToShortArray 도 작동해야 합니다.
크기 조정 없이 오류가 반환되면 더 좋을 것입니다.

그리고 안에

 CharArrayToString

왜 끝까지 안해?

 void OnStart ()
{
     const uchar array[] = { 'A' , 'B' , 'C' };
     const int start = 0 , count = 0 ;
     Print ( CharArrayToString ( array, start, count ));
}

결과: ""

 
A100 :

그리고 에서

왜 끝까지 안해?

결과: ""

아마도 CharArrayToString 에 [out] 동적 배열이 없기 때문일 것입니다.
그리고 개발자는 그것이 불필요하다고 결정했습니다.
그러나 유사한 기능의 다른 논리는 더 많은 혼란을 야기합니다.

사유: