代码回顾:从一个文本文件中读取一行的内容,进行数据处理。
今天在写一个测试用例的时候,需要实现如题的功能: 一、用ifstream 和getline 来实现。? <pre name="code" class="html"> string tmpStr(""); string *a = new string[MAX_LINES]; int index = 0; inFile.open("haha.txt",ios::in); if (NULL == inFile) { cout << "文件打开失败!" << endl; return ; } while (<span style="font-family: Arial,Helvetica,sans-serif;">getline(inFile,tmpStr)</span>) { a[index] = tmpStr; index += 1; } for (int j = 0; j < index; j++) { cout << a[j] << endl; } //string 转换为char const char *p = a->c_str(); char *pData; pData=const_cast<char *>(p); preDealTheUartData_Purifier(( uint8_t *)p,strlen(p)); 这段代码有两个问题: 1、 在这段代码中a是string格式的,不方便进行字符处理,所以需要将string转换为char类型,函数原型static void preDealTheUartData_Purifier( uint8_t *data,uint32_t len); 本人一开始就在想着怎样把p的const 属性去掉,网上的一些博客说:不能把一个const变量直接赋给一个非const变量,必须要转换,是不严谨的说法,如果是普通的const变量,只要不修改其值就可以,这边问题的根源是指针的初始化问题: void funA(int *a); void funB(const int *b); int *ia; const int *ib; funB(ia); //正确 funB(ib); //正确 funA(ia); //正确 funA(ib); //错误:不可以将非const对象的指针指向const对象,但是可以将const对象的指针指向非const对象 说明:如图 说明:p是一个指向const对象的指针,不能通过p修改其指向对象的值,但是p可以保存const和非const对象的地址,如果p保存的是非const对象的地址,则需要通过新建另外一个非const指针进行过度来修改。而对于q,这类普通的指针,不能将其赋予const对象的地址。(C++primer4 :4.2.5节) 后来我发现data这个数据在程序中本身就没有修改,需要设置为const,同时如果不改变data的const属性,直接使用(unsigned char*)p,类型强制转换,就可以修改p的const属性(环境VC++),而且不会报错,这一点值得商量。 2、 getline(inFile,tmpStr)中的getline是 从输入流中读入字符,存到string变量, 但这边的tempStr就有问题了,字符串遇到‘ ’就会就会截止输入,二进制文件里只要出现0x00,后面的字符就无法获取了。这里需要注意的是:空字符 对应的二进制为00000000,而数字0为00110000。百科中的getline定义是:
size_t getline(char **lineptr,size_t *n,FILE *stream); 其实可以试一试这一种函数,比较符合常规,下面来阐述第二种方案。 二、用FILE ?fopen来实现(自行定义MAX_SIZE) <span style="white-space:pre"> </span>FILE *fp; char *ch=new char[MAX_SIZE]; if((fp=fopen("haha.txt","ab+"))==NULL) //ab+以二进制打开,可读写 { printf("n不能打开文件!"); return 0; } ch[len]=fgetc(fp); //存入数组 while(ch[len]!=EOF) //读到文件末尾 { if(len<MAX_SIZE) ch[++len]=fgetc(fp); else { printf("n输入的数据超过界限!"); return 0; } }可以完美实现 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |