Matlab/Simulink: How to extract S-function parameter as std::string

This helper function allows you to extract a string parameter from an S-function in MATLAB/Simulink and return it as a std::string. It handles the case where the parameter might not be set or is not a string, returning a default value if necessary.

// Helper function to get string parameter from S-function parameters
static std::string extractSFunctionParameterAsString(SimStruct *S, int paramIndex, const std::string& defaultValue = "default") {
    const mxArray* param = ssGetSFcnParam(S, paramIndex);
    if (param == nullptr || !mxIsChar(param)) {
        return defaultValue; // Default fallback
    }
    
    // Get string length and allocate buffer
    mwSize nameLen = mxGetNumberOfElements(param) + 1;
    char* nameBuffer = new char[nameLen];
    
    // Extract string from MATLAB parameter
    if (mxGetString(param, nameBuffer, nameLen) == 0) {
        std::string result(nameBuffer);
        delete[] nameBuffer;
        return result;
    } else {
        delete[] nameBuffer;
        return defaultValue;
    }
}

Don’t forget to set the number of parameters in your S-function using ssSetNumSFcnParams() in mdlInitializeSizes() and to define the parameter in your Simulink model:

static void mdlInitializeSizes(SimStruct *S) {
    ssSetNumSFcnParams(S, 1); // Set number of parameters

    // Example usage
    std::string myParam = extractSFunctionParameterAsString(S, 0, "default_value");
    // Use myParam as needed
}