C语言中动态数组问题

jokenit 2009-11-01 02:29:54
各位大虾,我欲在C中实现一个char类型的数组,这个数组的元素个数不知道,每一个元素的长度都为10,如何实现呀?(其实就是要实现动态分配一维的字符串string数组)
...全文
119 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jokenit 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 akirya 的回复:]
C/C++ codechar** c=(char**)malloc(sizeof(char*)* n );for( i=0 ; i< n ; i++ )
c[i]= (char*)malloc(sizeof(char)*10 );for( i=0 ; i< n ; i++ )
free( c[i] );
free( c );
[/Quote]

原谅我的愚笨...这里面的变量n应该是确定的才行吧?我现在并不知道字符串数组元素个数的多少,只确定了字符串的长度呀...
jokenit 2009-11-01
  • 打赏
  • 举报
回复
可能我的表达不太准确,我这里说的"元素",指的字符串数组的一个字符串.如a[0]="123456789".
jokenit 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jackyjkchen 的回复:]
引用 5 楼 joken321 的回复:
引用 2 楼 jackyjkchen 的回复:
引用 1 楼 akirya 的回复:
C/C++ codechar** c=(char**)malloc(sizeof(char*)* n );for( i=0 ; i < n ; i++ )
  c[i]= (char*)malloc(sizeof(char)*10 );


不需要这么麻烦,char (*str)[10];只要分配一次内存就行了


如果是这样的话当我对数组赋值之后,假如要取数组的第一个元素应该怎么取呀?str[0]么?应该不是吧?


就是str[0],取得第一组10个字符的首地址,str[1]第二组
[/Quote]

感觉理解有点错误.我现在是确定了字符串的长度而数组元素的个数是不确定的,按照你的这个方法应该是确定了数组元素的个数而字符串的长度没有确定.还是说我理解错了呢?
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 joken321 的回复:]
引用 2 楼 jackyjkchen 的回复:
引用 1 楼 akirya 的回复:
C/C++ codechar** c=(char**)malloc(sizeof(char*)* n );for( i=0 ; i < n ; i++ )
  c[i]= (char*)malloc(sizeof(char)*10 );


不需要这么麻烦,char (*str)[10];只要分配一次内存就行了


如果是这样的话当我对数组赋值之后,假如要取数组的第一个元素应该怎么取呀?str[0]么?应该不是吧?
[/Quote]
char ?
str[0][0];
jackyjkchen 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 joken321 的回复:]
引用 2 楼 jackyjkchen 的回复:
引用 1 楼 akirya 的回复:
C/C++ codechar** c=(char**)malloc(sizeof(char*)* n );for( i=0 ; i < n ; i++ )
  c[i]= (char*)malloc(sizeof(char)*10 );


不需要这么麻烦,char (*str)[10];只要分配一次内存就行了


如果是这样的话当我对数组赋值之后,假如要取数组的第一个元素应该怎么取呀?str[0]么?应该不是吧?
[/Quote]

就是str[0],取得第一组10个字符的首地址,str[1]第二组
  • 打赏
  • 举报
回复

char** c =(char**)malloc( sizeof(char*) * n );
for( i = 0 ; i < n ; i++ )
c[i] = (char*)malloc( sizeof(char)*10 );


for( i = 0 ; i < n ; i++ )
free( c[i] );
free( c );
jokenit 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackyjkchen 的回复:]
引用 1 楼 akirya 的回复:
C/C++ codechar** c=(char**)malloc(sizeof(char*)* n );for( i=0 ; i < n ; i++ )
  c[i]= (char*)malloc(sizeof(char)*10 );


不需要这么麻烦,char (*str)[10];只要分配一次内存就行了
[/Quote]

如果是这样的话当我对数组赋值之后,假如要取数组的第一个元素应该怎么取呀?str[0]么?应该不是吧?
jokenit 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
C/C++ code
char** c=(char**)malloc(sizeof(char*)* n );for( i=0 ; i< n ; i++ )
c[i]= (char*)malloc(sizeof(char)*10 );
[/Quote]

使用之后要不要释放内存呀?会不会引起内存泄漏?如果要的话应该如何释放?
t1397018 2009-11-01
  • 打赏
  • 举报
回复
malloc
jackyjkchen 2009-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
C/C++ codechar** c=(char**)malloc(sizeof(char*)* n );for( i=0 ; i< n ; i++ )
c[i]= (char*)malloc(sizeof(char)*10 );
[/Quote]

不需要这么麻烦,char (*str)[10];只要分配一次内存就行了
  • 打赏
  • 举报
回复
char** c =(char**)malloc( sizeof(char*) * n );
for( i = 0 ; i < n ; i++ )
c[i] = (char*)malloc( sizeof(char)*10 );

69,373

社区成员

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

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