本文共 1703 字,大约阅读时间需要 5 分钟。
int GetSections(CStringArray& arrSection) //读取INI字段{ int i; int iPos=0; int iMaxCount; TCHAR chSectionNames[102400]={0}; //总的提出来的字符串 TCHAR chSection[20]={0}; //存放一个段名。 GetPrivateProfileSectionNames(chSectionNames,102400,"c:\\windows\\psw.ini"); //以下循环,截断到两个连续的0 for(i=0;i <102400;i++) { if (chSectionNames[i]==0) if (chSectionNames[i]==chSectionNames[i+1]) break; } iMaxCount=i+1; //要多一个0号元素。即找出全部字符串的结束部分。 //arrSection.RemoveAll();//清空原数组 for(i=0;i
int read_ini_section_name(char str_ini_path[],char str_return[][100]){ char chSectionNames[2048]; //所有节名组成的字符数组 char * pSectionName; //保存找到的某个节名字符串的首地址 int i; //i指向数组chSectionNames的某个位置,从0开始,顺序后移 int j=0; //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量 int count=0; //统计节的个数 int k=0; ::GetPrivateProfileSectionNames(chSectionNames,2048,str_ini_path); for(i=0;i<2048;i++,j++) { if(chSectionNames[0]=='\0') { break; //如果第一个字符就是0,则说明ini中一个节也没有 } if(chSectionNames[i]=='\0') { pSectionName=&chSectionNames[i-j]; //找到一个0,则说明从这个字符往前,减掉j个偏移量, //就是一个节名的首地址 j=-1; //找到一个节名后,j的值要还原,以统计下一个节名地址的偏移量 //赋成-1是因为节名字符串的最后一个字符0是终止符,不能作为节名的一部分 ++k; ++count; strcpy(str_return[i],pSectionName); if(chSectionNames[i+1]==0) { break; //当两个相邻的字符都是0时,则所有的节名都已找到,循环终止 } } } return 0;} 调用方法 char str_return[1024][100]={0}; read_ini_section_name("c:\\windows\\psw.ini",str_return); for (int i=0;i<1024;i++) { if (strlen(str_return[i])) { MessageBox(0,str_return[i],0,0); } }
转载地址:http://ygpob.baihongyu.com/