如何将字符串中所有单词摘出来到一个新的二维数组中

有问题请教,
怎样用C编写函数将一个字符串中所有单词摘出来到一个新的二维数组中(字符串中有数字和字母)例如aaa111aa11a1变换之后是三个字符串aaa,aa,a

/*
给定一行文本,拆分成单词。
主要用到三个 string.h 中的库函数

1. strncpy(s, ct, n); 把字符从 cn 复制到 s 中,最多复制 n 个字符;
2. strpbrk(cs, ct)    在字符串 cs 中搜索任何属于 ct 的字符,并返回第一个位置指针,搜索不到则返回 NULL
3. strspn(cs, ct)     返回cs中由 ct 里的字符构成的子字符串的长度

*/

#include <stdio.h>
#include <string.h>
#define N 100

// 要拆分的字符串
char buf[N] = "aaa111aa11a1";

// 设置单词包含的字符
const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

char res[N][N]; // 保存结果
int main()
{

    if (buf == NULL){
        printf("空指针\n");
        return 1;
    }
    printf("原字符串是:%s:\n", buf);

    char *p=buf; // p 定位尚未搜索的字符

    int len = 0; // 辅助搜索
    int word_cnt = 0; // 有多少个单词
    // 搜索
    while (p=strpbrk(p, letters)){
        len = strspn(p, letters);
        strncpy(res[word_cnt++], p, len);  // res 是全局变量,默认初始化为全零。所以复制后不用补尾零。
        p+=len;
    }

    // 输出结果
    if (word_cnt > 0){
        printf("拆分出 %d 个单词: ", word_cnt);
        for (int i = 0; i<word_cnt; i++){
            printf("%s, ", res[i]);
        }
        printf("\n");
    }else{
        printf("没有发现单词\n");
    }
    return 0;
}