![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Aggiunto StringLen al test, e inizializzato la stringa in modo diverso. La documentazione dice una cosa, il comportamento reale è diverso.
E il buffer in questo caso mostra 0 invece di 260.
La documentazione specifica quando viene restituito 0 ed è appropriato per il caso specificato
La documentazione indica quando viene restituito 0 ed è appropriato per il caso indicato
La documentazione non corrisponde affatto al comportamento attuale!
E i risultati sono diversi ))Qual è la differenza tra i due tipi di inizializzazione?
E non è chiaro da dove venga il numero 260 di sinistra.
La documentazione non corrisponde affatto al comportamento attuale!
Documentazione: un valore di 0 significa che la stringa è una costante e il contenuto del buffer non può essere cambiato.
La stringa è inizializzata con una costante "_" e il compilatore considera la stringa condizionatamente (per scopi di efficienza) una costante - perché no? Perché c'è una contraddizione? Tanto più che non vengono eseguite altre operazioni con esso.
E in generale non è chiaro da dove venga il numero 260 di sinistra.
Il moderatore ha spiegato da dove viene, e perché nel caso di
non appare - motivo per controllare
Il moderatore ha chiarito da dove
Penso di averlo ottenuto con il numero 260, il compilatore stesso alloca la dimensione iniziale del bufferStringBufferLen a 260.
Se la lunghezza della stringa è inferiore a 260, StringBufferLen stamperà 260, non la lunghezza effettiva della stringa!
E se la lunghezza della stringa è maggiore di 260, allora viene stampato il valore reale della stringa.
Quindi, usando la funzione StringBufferLen, con una lunghezza di stringa inferiore a 260 caratteri, non otterremo la lunghezza reale della stringa, e otterremo sempre 260.
Questo deve essere un errore.
Non appena la lunghezza supera i 260 caratteri, otterremo la lunghezza reale della stringa.
p.s. poiché la documentazione non è aggiornata è molto fuorviante.
Cioè, usando la funzione StringBufferLen, con una lunghezza di stringa inferiore a 260 caratteri, non otterremo la lunghezza effettiva della stringa, e otterremo sempre 260.
Questo deve essere un errore.
Non appena la lunghezza supera i 260 caratteri, otterremo la lunghezza reale.
Lunghezza della stringa in senso stretto: StringLen e lunghezza del buffer: StringBufferLen sono funzioni piuttosto rare. E in generale possono non coincidere.
Questo fa due casi almeno discutibili:
I risultati dell'esecuzione mostrano che il compilatore agisce contro la logica:
I risultati dell'esecuzione mostrano che il compilatore agisce contro la logica:
La dimensione di preallocazione dei buffer per le stringhe è una questione interna del compilatore.
Cambieremo la gestione delle stringhe molte altre volte.