关于未知长度的数组定义

小kid 2015-02-09 11:49:10
最近做了一个练习题,C的,发现一个问题。如果我需要一个数组来存一个字符串,但是代码运行中我不知道这个字符串到底多长?我该怎么办?是直接定义一个特别大的数组,能放下几乎所有可能的长度吗?这样的话会不会太浪费空间了!
...全文
889 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean10 2015-02-10
  • 打赏
  • 举报
回复
定义指针形式,再具体使用动态分配内存就好了。 不过这里还是需要知道你输入元素的长度,一般还是需要另外定义一个数组a[MAX]来判断需要分配的内存; 所以一般情况下一维数组不太用malloc,在二维及以上的时候用得比较多
paschen 2015-02-10
  • 打赏
  • 举报
回复
用标准模板库的std::string,它会根据你的字符串长度在堆上自动分配内存,而且效率也挺高,LZ可以研究下!
paschen 2015-02-10
  • 打赏
  • 举报
回复
用标准模板库的std::string,它会根据你的字符串长度在堆上自动分配内存,而且效率也挺高,LZ可以研究下!
anlory 2015-02-10
  • 打赏
  • 举报
回复
p = (int *) malloc (sizeof(int));这就是动态数组的模型,
小kid 2015-02-10
  • 打赏
  • 举报
回复
哎,我试了一下,无论如何都需要知道一个需要的空间大小,否则怎么都不行的!谢谢各位的回答,让我也学习到不少东西!
小kid 2015-02-10
  • 打赏
  • 举报
回复
引用 7 楼 shenwansan_gz 的回复:
lz的意思是定义一个完美的字符数组,可以储存任意长度的字符串? 如果是这个意思的话,malloc也是要求知道分配内存的长度的吧! 比较简单的一个做法是,使用加一个参数来说明数组长度,以便分配内存
但是我需要的长度会随程序的运行和用户输入来决定的啊,用户说啥时候结束就啥时候结束输入,这样的话malloc就不好用了!
小kid 2015-02-10
  • 打赏
  • 举报
回复
引用 4 楼 Sean10 的回复:
定义指针形式,再具体使用动态分配内存就好了。 不过这里还是需要知道你输入元素的长度,一般还是需要另外定义一个数组a[MAX]来判断需要分配的内存; 所以一般情况下一维数组不太用malloc,在二维及以上的时候用得比较多
我们拿二维举个例子,比如一个arr[][8],我现在需要一个字符串数组,但是我不知道几个字符串,只知道是每个字符串有最多7个字符。而且字符串个数随用户输入而变的。我该怎么办,如果我就像前面那样定义的话,二维数组是连续存放的,后续定义的一些空间就会接在他后面,再往arr里写字符串就会覆盖后面的数据。
沈万三gz 2015-02-10
  • 打赏
  • 举报
回复
lz的意思是定义一个完美的字符数组,可以储存任意长度的字符串? 如果是这个意思的话,malloc也是要求知道分配内存的长度的吧! 比较简单的一个做法是,使用加一个参数来说明数组长度,以便分配内存
小kid 2015-02-10
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
用标准模板库的std::string,它会根据你的字符串长度在堆上自动分配内存,而且效率也挺高,LZ可以研究下!
好的,需要深入研究下!
小kid 2015-02-10
  • 打赏
  • 举报
回复
引用 1 楼 anlory 的回复:
p = (int *) malloc (sizeof(int));这就是动态数组的模型,
但是这样的话在内存中由于是动态数组,我事先什么都没有写,只是一个int大小的空间,我后面又分配了一个其他空间,会不会在int的空间后面接着分配出来?如果这样的话我写第二个int的时候会不会把第二次分配的空间覆盖掉?

69,382

社区成员

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

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