Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Control de cadenas en C/C++

¿Cómo representa las cadenas en los archivos MEXMATLAB

En los archivos MEX de C/C++, un vector de caracteres es de tipo, utilizando una representación de datos de configuración regional neutra (codificación). representa cadenas de estilo C como tipo y usa el esquema de codificación de caracteres especificado por la configuración regional del usuario.MATLAB®mxArraymxCharUnicode®MATLABchar

Las siguientes funciones de la API de C Matrix proporcionan funciones de control de cadenas para ayudarle a trabajar con mxArrays y cadenas de estilo C.

  • : Permite crear un mxArray inicializado en la cadena de entrada.mxCreateStringmxChar

  • : Copia un mxArray en una cadena de estilo C.mxArrayToStringmxChar Admite caracteres codificados multibyte.

  • : Copia un mxArray en una cadena de estilo C.mxGetStringmxChar Se utiliza mejor con caracteres codificados de un solo byte. Admite caracteres codificados multibyte al calcular el tamaño del búfer de cadena.

  • : Devuelve un puntero al primer elemento del mxArray.mxGetCharsmxChar

Tenga en cuenta los siguientes temas al elegir una función de control de cadenas.

Codificación de caracteres y esquemas de codificación multibyte

admite el esquema de codificación de caracteres especificado por la configuración regional del usuario.MATLAB Cuando una función de biblioteca MX convierte datos a un tipo C, también convierte el carácter a la codificación predeterminada del usuario.mxCharcharMATLAB

Si utiliza un esquema de codificación multibyte, utilice la función.mxArrayToString

La función proporciona un puntero a la matriz; no cambia la codificación de caracteres.mxGetCharsmxChar

También puede utilizar la función con esquemas de codificación multibyte. convierte los datos a la codificación predeterminada del usuario y copia los caracteres convertidos al búfer de destino.mxGetStringmxGetStringmxChar Sin embargo, debe calcular el tamaño del búfer de destino. Para la codificación de un solo byte, el tamaño del búfer es el número de caracteres, además del terminador nulo.1 Para la codificación multibyte, el tamaño de un carácter es uno o más bytes. Algunas opciones para calcular el tamaño del búfer son sobrestimar la cantidad (calculando el número de caracteres multiplicado por el número máximo de bytes utilizado por el esquema de codificación), analizar la cadena para determinar el tamaño exacto utilizado por cada carácter, o utilizar bibliotecas de búfer de cadena de 3 ª parte. Después de este cálculo, agregue para el terminador nulo.1

Conversión de vector de carácter a cadena de estilo CMATLAB

Cuando se pasa una matriz de caracteres a una función MEX, es de tipo.mxArraymxChar Si llama a una función de C para manipular la cadena, primero convierta los datos a un tipo C mediante las funciones o.charmxArrayToStringmxGetString

Conversión de cadena de estilo C a vector de caracteresMATLAB

Si el archivo MEX crea una cadena C y devuelve los datos, utilice la función para copiar la cadena C en una matriz.MATLABmxCreateStringmxChar

Devolver la cadena de entrada modificada

Supongamos que el archivo MEX toma la entrada de caracteres, lo modifica y devuelve el resultado. Puesto que los parámetros de entrada de archivo MEX (la matriz) son de solo lectura, debe definir un parámetro de salida independiente para controlar la cadena modificada.prhs

Administración de memoria

recomienda que las funciones de archivo MEX destruyan sus propias matrices temporales y liberen su propia memoria asignada dinámicamente.MathWorks® La función que se utiliza para liberar memoria depende de cómo se utiliza el búfer de cadena y qué función se utiliza para crear el búfer.

Si llama a esta función

Liberar memoria mediante esta función

Cualquier función de cadena enumerada aquí

No destruya un archivo MEX de origen cuando sea:mxArray

  • Se pasa al archivo MEX en la lista lateral derecha.prhs[]

  • Devuelto en la lista del lado izquierdo.plhs[]

  • Devuelto por la función.mexGetVariablePtr

  • Se utiliza para crear una estructura.

mxArrayToString

mxFree

mxGetString

Cuando utilice//para crear un argumento de entrada, llame.mxCallocmxMallocmxReallocbufmxFree(buf)

mxCreateString

mxDestroyArray

mxGetChars

Ninguno. La función crea un puntero a un pero no asigna memoria adicional.mxArray

Temas relacionados