主题:请教有关c语言的编程
正序浏览
主题图片汇总
主题内检索
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
目前有这样一个文件

多行,每行的长度不定,总长知道

需要把每一行都读到一起后,

再进行处理(以固定长度来切割)

现在想具体了解下,每一行读出拼成一个字符串的处理

大概笼统的知道是使用malloc分配一个总长的内存空间

然后把第一行放进去,然后移动指针,放下一行

指针这块具体的写法不是很清楚

希望大神们给出一个代码例子

谢谢各位大神

或者有其他好办法,节约内存的办法更好

本帖由 无忌论坛V3.1.0 iPhone6plus iOS10.3.3 客户端编辑于:2018-04-05 07:50:53
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
浏览:1278 回帖:55
游客没有回帖权限
禁言中
泡网分: 6.153
主题: 16
帖子: 6141
注册: 2014年5月
笨蛋的笨蛋 发表于 2018-4-5 07:49
目前有这样一个文件

多行,每行的长度不定,总长知道

需要把每一行都读到一起后,

再进行处理(以固定长度来切割)

现在想具体了解下,每一行读出拼成一个字符串的处理

大概笼统的知道是使用malloc分配一个总长的内存空间

然后把第一行放进去,然后移动指针,放下一行

指针这块具体的写法不是很清楚

希望大神们给出一个代码例子

谢谢各位大神
能不能用nodejs写。。。JS也行,如果可以的话我直接上代码。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
禁言中
泡网分: 13.447
主题: 29
帖子: 8816
注册: 2015年7月
笨蛋的笨蛋 发表于 2018-5-22 21:30
我从来没说过自己是做C的。。。

只不过最近有个小东西需要给看看。。。

目前需要实现的处理,不值得使用构造体。。。

你能说说最简单的2维数组的用法,对我有帮助
有道是:工欲善其事,先必利其器,楼主还是好好研究下 C 语言吧。新手两星期,楼主有一定基础也就一星期的事。比现在这样东一榔头、西一棒子强。

本帖最后由 九里桥 于 2018-5-22 22:28 编辑

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 7.166
主题: 59
帖子: 14086
注册: 2008年11月
笨蛋的笨蛋 发表于 2018-05-22 21:30
我从来没说过自己是做C的。。。

只不过最近有个小东西需要给看看。。。

目前需要实现的处理,不值得使用构造体。。。

...

二维数组就好比格子,行就是你的m,列就是30,缺点是运行时候无法扩充,编译完成就定死了容量,查询时候根据行列取值,
如果行列越界,那么各种稀奇古怪的事情就来了,
所以m不能是变量,如果内存够大,m尽可能的用大数字,保证不越界
本帖由安卓客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 29.148
主题: 320
帖子: 14158
注册: 2008年6月
笨蛋的笨蛋 发表于 2018-5-22 21:30
我从来没说过自己是做C的。。。

只不过最近有个小东西需要给看看。。。

目前需要实现的处理,不值得使用构造体。。。

你能说说最简单的2维数组的用法,对我有帮助


并不存在真正的二维数组
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
出现好多奇怪的问题。。。

先是一点问题没有,后来出现画面显示不对的问题,内存溢出问题

没做修改,上面就都好了,结果出现画面数据不显示问题

在动态分配内存时,会影响到普通的变量吗?

画面显示的数据是用普通变量保持,动态分配的变量,往这个里面存放数据。。。

free后,貌似普通变量的数据被清空??

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
wangzhecnhit 发表于 2018-5-22 14:17
唉,你出去别说你是c语言开发,,,,
一个双向list,每一个list的node里面放一个char buf[30]。list的node,你要多少就可以申请多少。只要内存足够,不受大小限制,
node 数据结构:
typedef struct Node
{
    struct Node *prev;
    struct Node *next;
    char buf[30];
}Node;
list 数据结构:
typedef struct DList_
{
    int node_number;
    Node *head;
    Node *tail;
}Dlist;

剩下的,就是简单的双向链表插入,删除,查询操作,这个不用多写了吧,
你说的
“在我目前嵌入式环境下,跑的有点问题,不知哪里的问题


我从来没说过自己是做C的。。。

只不过最近有个小东西需要给看看。。。

目前需要实现的处理,不值得使用构造体。。。

你能说说最简单的2维数组的用法,对我有帮助
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 7.166
主题: 59
帖子: 14086
注册: 2008年11月
笨蛋的笨蛋 发表于 2018-5-22 11:29
别说这些,你给个代码先

昨天搞了几种,都不行

唉,你出去别说你是c语言开发,,,,
一个双向list,每一个list的node里面放一个char buf[30]。list的node,你要多少就可以申请多少。只要内存足够,不受大小限制,
node 数据结构:
typedef struct Node
{
    struct Node *prev;
    struct Node *next;
    char buf[30];
}Node;
list 数据结构:
typedef struct DList_
{
    int node_number;
    Node *head;
    Node *tail;
}Dlist;

剩下的,就是简单的双向链表插入,删除,查询操作,这个不用多写了吧,
你说的
“在我目前嵌入式环境下,跑的有点问题,不知哪里的问题

现在改成另一种方法,也是跑着跑着就会出问题

完全正常的时候也有,偶尔也会出现问题”

要么是数组越界,要么是野指针,
建议你找一本c语言的数据结构仔细看看,
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
陈年泡菜
泡网分: 47.9
主题: 28
帖子: 5353
注册: 2002年12月
笨蛋的笨蛋 发表于 2018-5-22 11:32
在我目前嵌入式环境下,跑的有点问题,不知哪里的问题
现在改成另一种方法,也是跑着跑着就会出问题
完全正常的时候也有,偶尔也会出现问题


你那嵌入环境内存有多大?那个 m 最多有多大?如果 m(max)*30 超过最大内存就得想别的法子,不能直接来
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
老顽童 发表于 2018-05-22 01:42
难道你认为这方法不行?我看不需要什么“土办法”。...


在我目前嵌入式环境下,跑的有点问题,不知哪里的问题

现在改成另一种方法,也是跑着跑着就会出问题

完全正常的时候也有,偶尔也会出现问题

本帖由 google 客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
wangzhecnhit 发表于 2018-05-22 00:20
从你的问题看,不是很久没有接触c,是从来没怎么接触c吧

...


别说这些,你给个代码先

昨天搞了几种,都不行

本帖由 google 客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
版主
泡网分: 156.067
主题: 146
帖子: 46497
注册: 2000年6月
内容贡献勋章 优质内容勋章
笨蛋的笨蛋 发表于 2018-5-22 06:58
恩,我也是好多年没接触c了

今天看看,不行还是用土办法了。。

不用2维了,就是单纯的一维文字列去处理了。。

每次按照30来切割出来后再处理。。。
难道你认为这方法不行?我看不需要什么“土办法”。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 2.894
主题: 2
帖子: 1990
注册: 2017年10月
笨蛋的笨蛋 发表于 2018-05-21 08:58
又来了

有劳各位,问下关于动态分配2维数组的问题

目前是char buf,这样的一个2维数组

m是可变的,需要动态分配

如何实现呢?...
建议描述一下具体应用。能用二维数组的场合都可以分配一块够大的平板算地址来实现。如果是数据流可以考虑较小缓冲区做ringbuffer,可以用数组或者链表来实现
本帖由安卓客户端编辑于:2018-05-22 09:33:49
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
陈年泡菜
泡网分: 47.9
主题: 28
帖子: 5353
注册: 2002年12月
笨蛋的笨蛋 发表于 2018-5-21 16:58
又来了

有劳各位,问下关于动态分配2维数组的问题

目前是char buf[m][30],这样的一个2维数组

m是可变的,需要动态分配

如何实现呢?


typedef struct MYARR
{
     char   buf[30];
}  myarr_st;

c++ 用 stl 如下
vector<myarr_st>  a;

c:

malloc 初始化分配,然后后来用着不够了再调用 realloc 扩大。

myarr_st  *a = (myarr_st  *)malloc( sizeof(*a)*defsize);

if( actsize>=defsize )
{
myarr_st  *newa = realloc(a,sizeof(*a)*newsize);
if( NULL==newa ) return(err);
defsize = newsize;
a = newa;
}
本帖最后由 太没劲了 于 2018-5-22 09:02 编辑

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 7.166
主题: 59
帖子: 14086
注册: 2008年11月
笨蛋的笨蛋 发表于 2018-05-22 06:58
恩,我也是好多年没接触c了

今天看看,不行还是用土办法了。。

不用2维了,就是单纯的一维文字列去处理了。。

每次按照30来切割出...

从你的问题看,不是很久没有接触c,是从来没怎么接触c吧
本帖由安卓客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
老顽童 发表于 2018-05-21 15:23
先定义一个指向char buf的指针,给它分配(m*30)个字节的动态空间,然后通过指针访问这个二维数组。

很多年没有编程了,不知道对...


恩,我也是好多年没接触c了

今天看看,不行还是用土办法了。。

不用2维了,就是单纯的一维文字列去处理了。。

每次按照30来切割出来后再处理。。。

本帖由 google 客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
版主
泡网分: 156.067
主题: 146
帖子: 46497
注册: 2000年6月
内容贡献勋章 优质内容勋章
笨蛋的笨蛋 发表于 2018-5-21 16:58
又来了

有劳各位,问下关于动态分配2维数组的问题

目前是char buf[m][30],这样的一个2维数组

m是可变的,需要动态分配

如何实现呢?
先定义一个指向char buf[ ][30]的指针,给它分配(m*30)个字节的动态空间,然后通过指针访问这个二维数组。

很多年没有编程了,不知道对不对。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 29.148
主题: 320
帖子: 14158
注册: 2008年6月
不刀不舒服斯基 发表于 2018-5-21 17:43
窃以为C语言是最好的语言


不是php吗?
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 18.944
主题: 51
帖子: 4663
注册: 2008年12月
笨蛋的笨蛋 发表于 2018-05-21 08:58
又来了

有劳各位,问下关于动态分配2维数组的问题

目前是char buf,这样的一个2维数组

m是可变的,需要动态分配

如何实现呢?...

标准的c不支持这样,因为数组空间在编译时分配。

不太明白具体要求,要是很复杂可以看看正则表达式库。
本帖由 MHA-AL00 客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 13.155
主题: 75
帖子: 14964
注册: 2014年7月
窃以为C语言是最好的语言
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 29.148
主题: 320
帖子: 14158
注册: 2008年6月
笨蛋的笨蛋 发表于 2018-5-21 16:58
又来了

有劳各位,问下关于动态分配2维数组的问题

目前是char buf[m][30],这样的一个2维数组

m是可变的,需要动态分配

如何实现呢?


先做一个指针数组
char* buf[INT_MAX]
再用一个变量m来指定大小
再对于每一个小于x<m的buf[x],做buf[x] = malloc(30)

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
又来了

有劳各位,问下关于动态分配2维数组的问题

目前是char buf[m][30],这样的一个2维数组

m是可变的,需要动态分配

如何实现呢?
本帖由 google 客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 5.456
主题: 15
帖子: 5115
注册: 2017年4月
要节约内存 就一个字一个字读呀 读满新文件格式一行的字数就插个换行符。 读到换行符就跳过。 然后buffer满了就写下文件。 对硬盘有没有要求呀 没要求的话 写个新文件再拷贝覆盖好了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
笨蛋的笨蛋 发表于 2018-04-19 07:56
又来提问了

一个结构体,动态分配内存给他

假如我分了10个结构体的内存

那么我访问每一个结构体,应该是怎么样的呢?

struct +...


已解决

就是正常的数组的写法。。。

struct.xxxxx这样的

[i=s] 本帖由 google 客户端发布

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
资深泡菜
泡网分: 42.14
主题: 603
帖子: 13249
注册: 2007年9月
内容贡献勋章
又来提问了

一个结构体,动态分配内存给他

假如我分了10个结构体的内存

那么我访问每一个结构体,应该是怎么样的呢?

struct + i
i是0到9?

本帖由 google 客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
禁言中
泡网分: 13.447
主题: 29
帖子: 8816
注册: 2015年7月
九里桥 发表于 2018-4-7 20:08
读入文本文件排版输出是吧?可以全文读入内存是吧?

另做一个指针数组,大小等于【预计切割后最大行数】就 OK 了。然后逐行把切割后每行的行首地址赋给这个数组,然后再用覆盖方式逐行写回就是了。

其实如果只需要切割回写不需要其它处理的话,指针数组都不用,直接动态回写就 OK 了:

不用问源文件的“行”,从文件头开始读取目标【行宽】个字符,遇到 /n 时截止。然后直接把这些字符用行的形式写回。然后在去操作下一组字符。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
禁言中
泡网分: 13.447
主题: 29
帖子: 8816
注册: 2015年7月
笨蛋的笨蛋 发表于 2018-4-5 07:49
目前有这样一个文件

多行,每行的长度不定,总长知道

需要把每一行都读到一起后,

再进行处理(以固定长度来切割)

现在想具体了解下,每一行读出拼成一个字符串的处理

大概笼统的知道是使用malloc分配一个总长的内存空间

然后把第一行放进去,然后移动指针,放下一行

指针这块具体的写法不是很清楚

希望大神们给出一个代码例子

谢谢各位大神


读入文本文件排版输出是吧?可以全文读入内存是吧?

另做一个指针数组,大小等于【预计切割后最大行数】就 OK 了。然后逐行把切割后每行的行首地址赋给这个数组,然后再用覆盖方式逐行写回就是了。

(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
泡菜
泡网分: 3.16
主题: 17
帖子: 4043
注册: 2013年6月
既然一行不超过4096个字符,那就把buffer定为4096,一次读取这么多,再从里面找到第一个"\n",把这之前的拷贝走,再重这个地方重新读取4096个就好了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
陈年泡菜
泡网分: 47.9
主题: 28
帖子: 5353
注册: 2002年12月
笨蛋的笨蛋 发表于 2018-4-5 20:13
这个想法也想过
回头来还是要处理一大串的字符串
所以就pass了
还是按照首贴写的那种方式,动态内存变量
今天简单跑了下,速度还挺快


我跟那 kingsk 一个观点,不明白你这个回头还要处理一大串的字符串啥意思(即便读入内存,估计那个回头处理一大串字符串也还是得有),写入新文件时完全可以按照长度来生成文件名,然后简单读就好,如果真的极在乎空间效率这么干是最好的,否则就按照可能长度中最长的来分配或者定义静态(或全局)数组(如果多线程啥的不合适),也不必 malloc 啥的,因为你反正很可能得 malloc 到那个最大的内存,那还不如直接定义成它好了。
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
ChK
陈年泡菜
泡网分: 51.415
主题: 24
帖子: 14648
注册: 2003年1月
nahcooo 发表于 2018-04-06 10:56
感觉C++就是在重复造轮子

例如字符串处理,继承了C语言的char*,有一大堆的strcpy一类的函数
然后windows ...
公路胎,山地胎,冬季胎,然后,14寸的,15寸的……,不同遍平比的,挑花眼了
本帖由安卓客户端发布
(0)
(0)
只看该作者
不看该作者
加入黑名单
举报
返回顶部
个人图文集
个人作品集
回复主题: 请教有关c语言的编程
功能受限
游客无回复权限,请登录后再试