- 论坛徽章:
- 6
|
回复 5# titansword2000
似乎没问题,因为能顺利运行
没有发现bug
long lPos21 = strSearch(IN, "page", 1);
所要查找的字符串[page [第1次] ]在文件[s.txt]中位于5字节处.
This
long lPos21 = strSearch(IN, "page", 2);
所要查找的字符串[page [第1次] ]在文件[s.txt]中位于51字节处.
This page is part of release 4.14 of the Linux man-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- FILE *FOUT;
- FILE *fp_in;
- long strSearch(char *strFile, char *strTar, int iNum) {
- int i, j = 0, iLen;
- long lPos;
- char strTmp[256];
- FILE *fp_file;
- if ((fp_file = fopen(strFile, "r+")) == NULL) {
- printf(
- "不能在子函数strSearch中打开目标文件: %s,请检查该文件是否存在!\n",
- strFile);
- exit(101);
- }
- iLen = strlen(strTar);
- for (i = 0; i < iLen; i++)
- fscanf(fp_file, "%c", &strTmp[i]);
- strTmp[iLen] = '\0';
- lPos = ftell(fp_file);
- if (strcmp(strTmp, strTar) == 0) {
- lPos = ftell(fp_file) - iLen;
- j++;
- if (j == iNum) {
- fclose(fp_file);
- return lPos;
- }
- }
- while (!feof(fp_file)) {
- for (i = 0; i < iLen - 1; i++)
- strTmp[i] = strTmp[i + 1];
- fscanf(fp_file, "%c", &strTmp[iLen - 1]);
- if (strcmp(strTmp, strTar) == 0) {
- lPos = ftell(fp_file) - iLen;
- j++;
- if (j == iNum) {
- fclose(fp_file);
- return lPos;
- }
- }
- }
- if (feof(fp_file)) {
- fclose(fp_file);
- return -1l;
- }
- return -2l;
- }
- int main() {
- char *OUT = "o.txt";
- char *IN = "s.txt";
- if ((FOUT = fopen(OUT, "w+")) == NULL) {
- printf("不能建立结果文件: %s,请检查磁盘空间是否足够!\n", OUT);
- exit(5);
- }
- // system ("unix2dos.exe 6.fct");
- // strcpy (IN, "6.fct");
- long lPos21 = strSearch(IN, "page", 2);
- #define TAR "page"
- if (lPos21 < 0) {
- printf("所要查找的字符串[%s [第1次] ]在文件[%s]中不存在.\n", TAR, IN);
- return -1;
- } else
- printf("所要查找的字符串[%s [第1次] ]在文件[%s]中位于%ld字节处.\n", TAR,
- IN, lPos21);
- if ((fp_in = fopen(IN, "r+")) == NULL) {
- printf("不能打开源文件: %s,请检查该文件是否存在!\n", IN);
- exit(4);
- }
- char chTmp;
- for (long lTem = 0; lTem < lPos21; lTem++) {
- fscanf(fp_in, "%c", &chTmp);
- printf("%c", chTmp);
- fprintf(FOUT, "%c", chTmp);
- }
- // fprintf (FOUT, "\n%s年%s月%s日", strYear, strMon, strDay);
- fclose(fp_in);
- fclose(FOUT);
- }
复制代码
|
|