Hatalar, hatalar, sorular - sayfa 3021

 
fxsaber :

Hata, sonuçları değil, bu iki işlev arasındaki tutarsızlıktır, çünkü bu sadece sayım = 0 olduğunda neyin çıktısının alınacağı bir dokümantasyon meselesidir.

Hayır, tekdüzelik ilkesi diye bir şey var. bug bariz. Bunun neden bir hata olduğunu anlamıyorsanız, bu yalnızca sizin sorununuzdur.

 
fxsaber :

Hata, sonuçları değil, bu iki işlev arasındaki tutarsızlıktır, çünkü bu , count=0 olduğunda neyin çıktısının alınacağını gösteren bir belge meselesidir.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

Roma , 2021.05.07 22:07

İşte işlevin açıklamasındaki püf noktası))

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

otomatik ilerleme
ki bu kullanıcı için daha kafa karıştırıcıdır.

A100 :

Ve bir uygulayıcı, teorisyenlere böyle çelişkili bir sonucu nasıl açıklar:

Sonuç: 4:0

Beklenen: 0:0

veya ayrıca - belgeleri biraz düzeltin mi? Eh, sonunda hataları düzeltmeyin!

Açıklamam basit: Bu normal işlevlerden birinde bir hata var - ve hatta hangisi olduğunu biliyorum


 
Roman :

Ondan sonra, Geliştiriciler zaten düzeltti , bu yüzden önceki açıklamanız iyi değil.

İşlevler aynıdır (yalnızca türde, aslında şablonda farklılık gösterirler), açıklama aynıdır (hatta çapraz referanslar vardır), ancak sonuç farklıdır

 
A100 :

Geliştiriciler zaten orada düzeltti , bu yüzden önceki açıklamanız iyi değil

Tam olarak ne düzeltildi?
Her zaman belgelerde olduğu gibi olmuştur.

str1

str1


Neyin düzeltildiğini kontrol ettiniz mi? ))
Sabit, istediğiniz gibi bölün.
örneğin 3 karakter

 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

Ancak count öğesine 0 iletirseniz , sonunda sıfır ile biten dizenin tamamı otomatik olarak kopyalanır.
Dize boş olsa bile, sonlanan sıfır kopyalanacaktır.

 char ch[];
int str = StringToCharArray ( "", ch, 0 , 0 );
    
Print (" StringToCharArray "+( string )str);
 2021.05 . 25 02 : 24 : 47.161 Test (AUDUSD,M1)   StringToCharArray 1
Ve StringLen() bir sonlandırıcı boş döndürmez))
 
Roman :

Tam olarak ne düzeltildi?

Ancak count öğesine 0 iletirseniz , sonunda sıfır ile biten dizenin tamamı otomatik olarak kopyalanır.
Dize boş olsa bile, sonlanan sıfır kopyalanacaktır.

Ve neden StringToShortArray'de farklı? Mümkünse kısaca, hileler ve anlaşılmaz referanslar olmadan geçmişteki harika açıklamalarınıza (sonunda savunulamaz olduğu ortaya çıktı) - basit bir şekilde - bir çaydanlık için açıklayın.

olmadan ; ) ve bu konudaki diğer uygunsuz karakterler

 
A100 :

Ve neden StringToShortArray'de farklı? Mümkünse kısaca, hileler olmadan ve geçmişteki (sonunda savunulamaz olduğu ortaya çıkan) parlak açıklamalarınıza anlaşılmaz referanslar olmadan açıklayın - basit bir şekilde - bir çaydanlık için

olmadan ; ) ve bu konudaki diğer uygunsuz karakterler

Bölünmüş koşu

 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 sayısı neden çalışmıyor, bilmiyorum.
Muhtemelen 0 sayısındaki bu kurnaz otomasyon burada çalışmıyor ve yardıma göre, bu zaten bir tutarsızlık.
Ve muhtemelen bir hata.

 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

Kısacası bir yanlışlık mı var?   0 say   çalışmıyor,
veya StringToCharArray'de 0 sayısındaki bir hata tetiklenir.

Açıklamaların tutarlılığını anlayabilmeniz için C dilinin temellerini ve özellikle stringlerle çalışmayı öğrenin.
Ve sonra hiçbir soru olmayacak.

 
Roman :

Kısacası bir yanlışlık mı var?   0 say   çalışmıyor,
veya StringToCharArray'de 0 sayısındaki bir hata tetiklenir.

Parlak!

 
A100 :

Parlak!

Kesinlikle parlak. Yardım, nasıl çalışılacağını açıkça açıklamaz   0 say .
Ama eğer kafayı açarsanız, o zaman dizinin sıfır boyutunu geçmek ve ona sıfır bellek ayırmak, hafifçe söylemek gerekirse, gariptir.
buna göre   count 0 , dizenin sonuna kadar otomatik yeniden boyutlandırmayı tetikler .
Mantıksal olarak, StringToShortArray de çalışmalıdır.
Herhangi bir yeniden boyutlandırma olmadan hata döndürülürse daha iyi olur.
 
Roman :
Kesinlikle parlak. Yardım, nasıl çalışılacağını açıkça açıklamaz   0 say .
Ama eğer kafayı açarsanız, o zaman dizinin sıfır boyutunu geçmek ve ona sıfır bellek ayırmak, hafifçe söylemek gerekirse, gariptir.
Bu nedenle, 0 sayımında, satırın sonuna kadar otomatik yeniden boyutlandırma tetiklenir .
Mantıksal olarak, StringToShortArray de çalışmalıdır.
Herhangi bir yeniden boyutlandırma olmadan hata döndürülürse daha iyi olur.

Ve

 CharArrayToString

neden sonuna kadar değil?

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

Sonuç: ""

 
A100 :

Ve

neden sonuna kadar değil?

Sonuç: ""

Muhtemelen CharArrayToString içinde [out] dinamik dizi olmadığı için.
Ve geliştirici bunun gereksiz olduğuna karar verdi.
Her ne kadar benzer işlevlerde farklı mantık daha fazla kafa karışıklığı getirir.