代码回顾:从一个文本文件中读取一行的内容,进行数据处理。

今天在写一个测试用例的时候,需要实现如题的功能:

一、用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就有问题了,字符串遇到‘\0’就会就会截止输入,二进制文件里只要出现0x00,后面的字符就无法获取了。这里需要注意的是:空字符\0对应的二进制为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;
		}
	} 
可以完美实现



展开阅读全文

没有更多推荐了,返回首页