---
name: "Mat_VarReadNextInfo"
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_VarReadNextInfo"
---

# Mat\_VarReadNextInfo(3)

Reads the information for the next variable in a MATLAB MAT file.

## NAME

**Mat\_VarReadNextInfo** – Reads the information for the next variable in a MATLAB MAT file.

## SYNOPSIS

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

*matvar\_t* *\**\

**Mat\_VarReadNextInfo**(*mat\_t \*matfp*);

## DESCRIPTION

The **Mat\_VarReadNextInfo**() function reads the information for the next variable stored in the open MAT file.

## RETURN VALUES

If there is another variable in the MAT file and is read successfully, a pointer to the MATLAB variable structure is returned. If there are no more variables, or there was an error reading the variable, NULL is returned.

## EXAMPLES

This example program opens a MAT file named by the first argument to the program, and uses **Mat\_VarReadNextInfo**() to read the information about each variable in the file. For each variable read, the name, size, and class are printed in a format similar to the MATLAB whos command.

```
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "matio.h"
static char *mxclass[17] = {"cell", "struct", "object", "char", "sparse",
                            "double", "single", "int8", "uint8", "int16",
                            "uint16", "int32", "uint32", "int64", "uint64",
                            "function", "opaque"
                           };
int
main(int argc, char **argv)
{
    mat_t *matfp;
    matvar_t *matvar;
    char size[32] = {' ',};
    matfp = Mat_Open(argv[1], MAT_ACC_RDONLY);
    if ( NULL == matfp ) {
        fprintf(stderr, "Error opening MAT file %s0, argv[1]);
        return EXIT_FAILURE;
    }
    printf("%-32s%-16s%-16s%-16s0n", "Name", "Size", "Bytes", "Class");
    while ( NULL != (matvar = Mat_VarReadNextInfo(matfp)) ) {
        printf("%-32s", matvar->name);
        if ( matvar->rank > 0 ) {
            int cnt;
            int i;
            cnt = snprintf(size, sizeof(size), "%zd", matvar->dims[0]);
            for ( i = 1; i < matvar->rank; i++ ) {
                if ( ceil(log10((double)matvar->dims[i])) + 1 < 32 ) {
                    cnt += snprintf(size + cnt, sizeof(size) - cnt,
                        "x%zd", matvar->dims[i]);
                    if ( cnt >= sizeof(size) ) {
                        break;
                    }
                }
            }
            printf("%-16s", size);
        } else {
            printf("                ");
        }
        snprintf(size, sizeof(size), "%zd", Mat_VarGetSize(matvar));
        printf("%-16s", size);
        printf("%-16s0, mxclass[matvar->class_type - 1]);
        Mat_VarFree(matvar);
    }
    Mat_Close(matfp);
    return EXIT_SUCCESS;
}
```

## SEE ALSO

[Mat\_VarRead(3)](/Mat_VarRead/3.md), [Mat\_VarReadInfo(3)](/Mat_VarReadInfo/3.md), [Mat\_VarReadNext(3)](/Mat_VarReadNext/3.md)
