动态数组问题

SnowmanBaby 2012-11-30 03:36:06
我想定义一个动态数组,这个动态数组是用这种方法来确定的。
假如KEY=abcde,那么我只需要定义一个数组char a[5],并且把abcde存到a中就可以了,假如KEY=ABCDEFG;1234567;1234ABC那么我就需要定义char a[3][7],把ABCDEFG存到a[0],1234567存到a[1],1234ABC存到a[2]中,也就是说KEY=XXX是我不知道的,这个值是我从文件中里读到的,读到什么样的值我就要定义一个相应的动态数组来存这些值,然后用这些值去做别的计算。我不知道这样的数组该怎样定义,请大虾们给我讲一下,非常感谢。

我自已只能想到我可以读到KEY=XXX,也可以从这里去找“;”出现的位置,这样我可以知道我需要几个数组来存这些值,但我却不知道这样的数组在程序中怎样定义
...全文
222 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
14号选手 2012-12-18
  • 打赏
  • 举报
回复
或者直接用一个指针数组就行了
char *p[5];
for(int i=0;i<5;i++)
   p[i]=(char *)malloc(sizeof(char)*n);
14号选手 2012-12-18
  • 打赏
  • 举报
回复
类似这样的就行了
char **p=(char **)malloc(sizeof(char *)*n);
for(int i=0;i<x;i++)
   a[i]=(char *)malloc(sizeof(char)*m);
赵4老师 2012-12-18
  • 打赏
  • 举报
回复
malloc,free
Zoelov 2012-12-18
  • 打赏
  • 举报
回复
你可以先对对到的数据统计个数,然后动态生成一个一维的数组,然后在后续计算使用时,在根据你的要求对数组中的数据进行分段处理。
zlxia0013 2012-12-18
  • 打赏
  • 举报
回复
char **ppc; ppc=(char*)malloc(行数 * sizeof(char *)); *(*ppc+i) = 字符串;
dhdahai 2012-11-30
  • 打赏
  • 举报
回复
引用 10 楼 SnowmanBaby 的回复:
还和编译器有关呀,知道了哦,谢谢楼主的讲解和代码.
楼主是你自己啊
  • 打赏
  • 举报
回复
mark~~
SnowmanBaby 2012-11-30
  • 打赏
  • 举报
回复
还和编译器有关呀,知道了哦,谢谢楼主的讲解和代码.
mymtom 2012-11-30
  • 打赏
  • 举报
回复
引用 8 楼 mymtom 的回复:
引用 5 楼 SnowmanBaby 的回复:是呀,我是说在C里边怎么实现这样的动态数组定义,我试着用变量去定义二维数组,不过编译就没通过 支持C99的编译器才可以,如果不支持只好用malloc了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char key[] =  "ABCDEFG;1234567;1234ABC";

    int i, m, n;
    char *ptr, *end;
    char *buf;

    m = 0, n = 0;
    ptr = key;
    while ((end = strchr(ptr, ';')) != NULL) {
        n++;
        if (m < end - ptr)
            m = end - ptr;
        ptr = end + 1;
    }
    n++;

    printf("m=%d n=%d\n", m, n);

    buf = malloc(n * (m + 1));
    ptr = key;
    i = 0;
    while ((end = strchr(ptr, ';')) != NULL) {
        *end = '\0';
        strcpy(&buf[i++ * (m + 1)], ptr);
        ptr = end + 1;
    }
    strcpy(&buf[i++ * (m + 1)], ptr);

    for (i = 0; i < n; i++)
        printf("arr[%d]='%s'\n", i, &buf[i * (m + 1)]);

    free(buf);
}
mymtom 2012-11-30
  • 打赏
  • 举报
回复
引用 5 楼 SnowmanBaby 的回复:
是呀,我是说在C里边怎么实现这样的动态数组定义,我试着用变量去定义二维数组,不过编译就没通过
支持C99的编译器才可以,如果不支持只好用malloc了。
mymtom 2012-11-30
  • 打赏
  • 举报
回复
用指针数组,或者变长数组都可以啊, 1. 先扫描字符串看看有多少个字符串(n), 和字符串的最大长度m; 2. 然后定义数组arr[n][m + 1], 把字符串进行分割保存到数组里

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char key[] =  "ABCDEFG;1234567;1234ABC";
    int m = 0, n = 0;
    char *ptr, *end;

    ptr = key;
    while ((end = strchr(ptr, ';')) != NULL) {
        n++;
        if (m < end - ptr)
            m = end - ptr;
        ptr = end + 1;
    }
    n++;
    m++;

    printf("m=%d n=%d\n", m, n);

    char arr[n][m];
    int i = 0;
    ptr = key;
    while ((end = strchr(ptr, ';')) != NULL) {
        *end = '\0';
        strcpy(arr[i++], ptr);
        ptr = end + 1;
    }
    strcpy(arr[i++], ptr);

    for (i = 0; i < n; i++) {
        printf("arr[%d]='%s'\n", i, arr[i]);
    }
}
dhdahai 2012-11-30
  • 打赏
  • 举报
回复
引用 5 楼 SnowmanBaby 的回复:
是呀,我是说在C里边怎么实现这样的动态数组定义,我试着用变量去定义二维数组,不过编译就没通过
数组定义需要常量! 这种情况需要 malloc free动态申请、释放内存
SnowmanBaby 2012-11-30
  • 打赏
  • 举报
回复
是呀,我是说在C里边怎么实现这样的动态数组定义,我试着用变量去定义二维数组,不过编译就没通过
dhdahai 2012-11-30
  • 打赏
  • 举报
回复
引用 3 楼 SnowmanBaby 的回复:
vector是C语言里的吗?我怎么在C语言编程设计里没有看到有这方面的讲解呀?不好意思我是初级菜鸟
是C++ STL(标准库)里的 那LZ只有自己实现了
SnowmanBaby 2012-11-30
  • 打赏
  • 举报
回复
vector是C语言里的吗?我怎么在C语言编程设计里没有看到有这方面的讲解呀?不好意思我是初级菜鸟
ardayoyo 2012-11-30
  • 打赏
  • 举报
回复
这里你最好用向量vector吧,可以动态获取size大小,其他的办法都不是很好 具体就是先按分号;隔断KEY的字符串,然后把每一段(字符串)压入vector中即可 读取这些字符串的时候,可以按vector下标读取,也可以用迭代器读取,都很方便
dhdahai 2012-11-30
  • 打赏
  • 举报
回复
用 STL vector

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧