Los resultados de la ejecución muestran que el compilador actúa de forma contraria a la lógica:
En el caso de una cadena constante, se asigna más memoria de la necesaria (en principio, no se puede aumentar su longitud)
No se asigna memoria adicional para una cadena no constante (si su longitud aumenta, se requerirá una nueva asignación de memoria)
Si el usuario inicializa una cadena con StringInitInit, se asigna más memoria de la necesaria, ya que el tamaño del buffer es establecido explícitamente por el usuario y en la mayoría de los casos no se incrementará (el usuario ya ha pensado qué buffer final necesita y ha establecido su tamaño explícitamente)
Para una cadena constante pura, el tamaño del buffer por StringBufferlen=0, lo que significa que la cadena es constante:
string s1 = "_"; // исходное "чистое" присвоение константной строки
Print(StringBufferLen(s1)); // показывает 0 верно, не должно быть 260
Reasignar una cadena "supuestamente" constante no es trabajar con una constante, sino crear exactamente una variable dinámica con una preasignación de 260 caracteres:
conststring s2 = s1; // динамическое создание переменной копированием данных из другой переменной (не константной строки)
Print(StringBufferLen(s2)); // показывает 260 верно
Para una cadena constante pura, el tamaño del buffer por StringBufferlen=0, lo que significa que la cadena es constante:
Reasignar una cadena "supuestamente" constante no es trabajar con una constante, es crear una variable dinámica con una preasignación de 260 caracteres:
Porque en la versión actual la función siempre devuelve la hora válida, aunque la cadena contenga basura, y se devuelve la fecha actual, lo cual es particularmente extraño:
StringToTime("aaabbbccc") devuelve "2019.09.05 01:00:00" ¿Es esto normal? En esta implementación, la función es peligrosa para la salud en absoluto, por lo que se necesita una versión con comprobaciones de corrección.
Hasta ahora tenemos que parsear con nuestra propia función,pero el problema es que la hora puede ser especificada en diferentes formatos.Y realmente no quiero codificar todos esos formatos reinventando la rueda cuando el tiempo ya ha sido implementado en MQL.
Básicamente, esto también se aplica a otras funciones de conversión de cadenas: StringToInteger, StringToDouble. No se proporciona ninguna comprobación de validez para ellos también.
p.d. Resulta queGetLastError() genera errores en estos casos. No lo sabía. La documentación de estas funciones no dice nada de eso. Eso elimina el problema, aunque sería más fácil con un bool.
error "la propiedad ya existe con un valor diferente y será omitida".
Lo usé por primera vez. Ningún otro archivo lo tiene. No depende del valor. Construye 2136.
Este error se produce al trabajar con proyectos si el valor de la propiedad especificada en el código fuente entra en conflicto con el valor de la configuración del proyecto.
Las propiedades del programa en el archivo de proyecto tienen prioridad sobre las propiedades especificadas en el código fuente. Si especifica propiedades tanto en el proyecto como en el código fuente, se utilizarán las propiedades del proyecto.
MetaEditor позволяет удобно работать над большими проектами: объединять множество файлов в одну структуру, управлять настройками проекта и вести совместную разработку с командой программистов через версионное онлайн-хранилище MQL5 Storage. Что такое проект Проект — это отдельный файл с расширением "MQPROJ", в котором хранятся настройки...
Стилизатор позволяет быстро привести оформление исходного кода к рекомендуемому стандарту. Это делает код легко читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще читать и анализировать в последующем как его автору, так и другим пользователям. Чтобы запустить стилизатор, нажмите " Стилизатор" в меню "Сервис" или...
Los resultados de la ejecución muestran que el compilador actúa de forma contraria a la lógica:
Para una cadena constante pura, el tamaño del buffer por StringBufferlen=0, lo que significa que la cadena es constante:
Reasignar una cadena "supuestamente" constante no es trabajar con una constante, sino crear exactamente una variable dinámica con una preasignación de 260 caracteres:
Para una cadena constante pura, el tamaño del buffer por StringBufferlen=0, lo que significa que la cadena es constante:
Reasignar una cadena "supuestamente" constante no es trabajar con una constante, es crear una variable dinámica con una preasignación de 260 caracteres:
es el momento de introducir los asignadores )))
Un recordatorio de que hay un error con el buffer de cadenas:
La función de la DLL puede ser cualquier cosa.Sugiero añadir una versión extendida de la funciónStringToTime a MQL en el formulario:
Porque en la versión actual la función siempre devuelve la hora válida, aunque la cadena contenga basura, y se devuelve la fecha actual, lo cual es particularmente extraño:
StringToTime("aaabbbccc") devuelve "2019.09.05 01:00:00" ¿Es esto normal? En esta implementación, la función es peligrosa para la salud en absoluto, por lo que se necesita una versión con comprobaciones de corrección.
Hasta ahora tenemos que parsear con nuestra propia función,pero el problema es que la hora puede ser especificada en diferentes formatos.Y realmente no quiero codificar todos esos formatos reinventando la rueda cuando el tiempo ya ha sido implementado en MQL.
Básicamente, esto también se aplica a otras funciones de conversión de cadenas: StringToInteger, StringToDouble. No se proporciona ninguna comprobación de validez para ellos también.
p.d. Resulta queGetLastError() genera errores en estos casos. No lo sabía. La documentación de estas funciones no dice nada de eso. Eso elimina el problema, aunque sería más fácil con un bool.Apoyo la sugerencia de Alexey, el manejo seguro de las cadenas es clave para evitar errores ocultos.
error "la propiedad ya existe con un valor diferente y será omitida".
Lo usé por primera vez. Ningún otro archivo lo tiene. No depende del valor. Construye 2136.
Por favor, traiga de vuelta el viejo estilo de styler.
Ahora no puedo averiguar qué se supone que se ejecuta aquí:
Esta pieza solía tener este aspecto:
error "la propiedad ya existe con un valor diferente y será omitida".
Lo usé por primera vez. Ningún otro archivo lo tiene. No depende del valor. Construye 2136.
Este error se produce al trabajar con proyectos si el valor de la propiedad especificada en el código fuente entra en conflicto con el valor de la configuración del proyecto.
Propiedades del proyecto
Por favor, traiga de vuelta el viejo estilo de styler.
Ahora no puedo averiguar qué se supone que se ejecuta aquí:
Esta pieza solía tener este aspecto:
Los ifs anidados múltiples no pueden ser guardados por ninguna alineación. Tenemos que cambiar el código para que sea legible.
Los ifs anidados múltiples no pueden ser guardados por ninguna alineación. Hay que cambiar el código para que sea legible.
No hay anidación múltiple - el nivel superior es if, luego if else.
Pido el estilo antiguo, cuando si se parecía a esto:
- Estaba en una sola línea y no había desplazamiento del texto posterior hacia la derecha.
Este es un ejemplo de la ayuda de lasentencia condicional if-else (el antiguo styler)
y esto es lo que hace el nuevo estilista: