---
name: "Mat_VarCreateStruct"
section: "3"
platform: "linux"
package: "libmatio"
version: "1.5.30-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Mat_VarCreateStruct"
---

# Mat\_VarCreateStruct(3)

Creates a structure variable.

## NAME

**Mat\_VarCreateStruct** – Creates a structure variable.

## SYNOPSIS

**#include \<matio.h\>**

*matvar\_t* *\**\

**Mat\_VarCreateStruct**(*const char \*name*, *int rank*, *const size\_t \*dims*, *const char \*const \*fields*, *unsigned nfields*);

## DESCRIPTION

The **Mat\_VarCreateStruct**() function creates a structure variable named *name* that can be written to a MAT file.

## RETURN VALUES

If the structure variable was successfully created, a pointer to the variable is returned. Otherwise NULL is returned. The structure variable pointer should be free'd when no longer needed using **Mat\_VarFree**(). The names of the fields are copied in the function, and thus should be released after calling the function if necessary. This function is deprecated since version 1.5.30. Use **Mat\_VarCreateStruct2** instead.

## EXAMPLES

This example program opens a MAT file named by the first argument to the program, and writes a structure named *a* to the file.

```
#include "matio.h"
int
main(int argc, char **argv)
{
    mat_t    *matfp;
    matvar_t *matvar;
    matvar_t *field;
    const char *fields[2] = {"field1", "field2"};
    double       data1 = 1, data2 = 2;
    size_t       dims[2] = {1, 1};
    matfp = Mat_Open(argv[1], MAT_ACC_RDWR);
    if ( NULL == matfp ) {
        fprintf(stderr, "Error opening MAT file %s0, argv[1]);
        return EXIT_FAILURE;
    }
    dims[0] = 1; dims[1] = 1;
    matvar = Mat_VarCreateStruct("a", 2, dims, fields, 2);
    if ( NULL == matvar ) {
        Mat_Close(matfp);
        return EXIT_FAILURE;
    }
    field = Mat_VarCreate(NULL, MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, &data1,
                MAT_F_DONT_COPY_DATA);
    Mat_VarSetStructFieldByName(matvar, "field1", 0, field);
    field = Mat_VarCreate(NULL, MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, &data2,
                MAT_F_DONT_COPY_DATA);
    Mat_VarSetStructFieldByName(matvar, "field2", 0, field);
    Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_NONE);
    Mat_VarFree(matvar);
    Mat_Close(matfp);
    return EXIT_SUCCESS;
}
```

## SEE ALSO

[Mat\_VarCreateStruct2(3)](/Mat_VarCreateStruct2/3.md), [Mat\_VarCreate(3)](/Mat_VarCreate/3.md), Mat\_VarSetStructFieldByName(3)
