![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Teste StringLen eklendi ve dize farklı şekilde başlatıldı . Belgeleme bir şeydir, aslında tamamen farklı bir davranıştır.
Ve bu durumda arabellek 260'ı değil 0'ı gösterir.
Belgeler, 0 döndürüldüğünde ve belirtilen durum için uygun olduğunu söylüyor
Belgeler, 0 döndürüldüğünde ve belirtilen durum için uygun olduğunu söylüyor
Belgeler mevcut davranışla hiç uyuşmuyor!
Ve sonuçlar farklıİki başlatma türü arasındaki fark nedir?
Ve soldaki 260 sayısının nereden geldiği hiç belli değil.
Belgeler mevcut davranışla hiç eşleşmiyor!
Belgeler: 0 değeri, dizenin sabit olduğu ve arabelleğin içeriğinin değiştirilemeyeceği anlamına gelir.
Dize "_" sabitiyle başlatılır ve derleyici dizeyi koşullu olarak (verimlilik amacıyla) bir sabit olarak değerlendirir - neden olmasın? Çelişki nedir? Ayrıca, onunla başka bir işlem yapılmaz.
Ve soldaki 260 sayısının nereden geldiği hiç belli değil.
Moderatör, davanın nerede ve neden olduğunu açıkladı
görünmüyor - kontrol nedeni
moderatör nerede açıkladı
260 sayısıyla, derleyicinin kendisinin bir StringBufferLen arabelleği ayırdığını anlıyorum. İlk boyut 260'tır.
Ve eğer dizinin uzunluğu 260'tan azsa, o zaman StringBufferLen, dizinin gerçek uzunluğunu değil, tam olarak 260'ı yazdırır!
Dizinin uzunluğu 260'tan büyükse dizinin gerçek değeri görüntülenir.
Yani, dize uzunluğu 260 karakterden az olan StringBufferLen işlevini kullanarak, dizenin gerçek uzunluğunu alamayız ve her zaman 260 alırız.
Görünüşe göre bunda bir hata var.
Terim 260 karakteri geçer geçmez, uzunluğun gerçek değerini alırız.
ps belgeler güncel olmadığı için yanıltıcıdır.
Yani, dize uzunluğu 260 karakterden az olan StringBufferLen işlevini kullanarak, dizenin gerçek uzunluğunu alamayız ve her zaman 260 alırız.
Görünüşe göre bunda bir hata var.
Terim 260 karakteri geçer geçmez, uzunluğun gerçek değerini alırız.
Kesin olarak konuşursak, dize uzunluğu: StringLen ve arabellek uzunluğu: StringBufferLen, oldukça nadir bir özelliktir. Ve genel durumda, çakışmayabilirler
Toplamda, en az iki şüpheli durum vardır:
Yürütme sonuçları Sabit bir dize için gerekenden daha fazla bellek tahsis edilir (prensipte uzunluğunu artırmak imkansız olacaktır)
Yürütme sonuçları Sabit bir dize için gerekenden daha fazla bellek tahsis edilir (prensipte uzunluğunu artırmak imkansız olacaktır)
Dizeler için arabelleklerin ön tahsisinin boyutu, derleyicinin dahili bir meselesidir.
İşi tekrar tekrar dizelerle değiştireceğiz.