2

我在一个文件中有以下内容:

hhasfghgsafjgfhgfhjf
gashghfdgdfhgfhjasgfgfhsgfjdg
jfshafghgfgfhfsghfgffsjgfj
.
.
.
.
.
startread
hajshjsfhajfhjkashfjf
hasjgfhgHGASFHGSHF
hsafghfsaghgf
.
.
.
.
.
stopread
.
.
.
.
.
.
jsfjhfhjgfsjhfgjhsajhdsa
jhasjhsdabjhsagshaasgjasdhjk
jkdsdsahghjdashjsfahjfsd

我需要读取从下一行startread到使用 ac 代码的上一行的行stopread并将其存储到一个字符串变量中(当然\n每个换行符都有一个)。我怎样才能做到这一点?我用过fgets(line,sizeof(line),file);,但它从头开始阅读。我没有确切的行号来开始和停止读取,因为该文件是由另一个 C 代码编写的。但是有这些标识符startreadstopread确定从哪里开始阅读。运行平台为linux。提前致谢。

4

2 回答 2

1

用于strcmp()检测startreadstopread。忽略所有读取的行,直到"startread"被读取,然后存储所有行,直到"stopread"被读取:

/* Read until "startread". */
char line[1024];
while (fgets(line, sizeof(line), file) &&
       0 != strcmp(line, "startread\n"));

/* Read until "stopread", only if "startread" found. */
if (0 == strcmp(line, "startread\n"))
{
    while (fgets(line, sizeof(line), file) &&
           0 != strcmp(line, "stopread\n"))
    {
        /* Do something with 'line'. */
    }
}
于 2012-06-22T15:06:59.483 回答
0
    #define MAX_BUF_LEN 1000    
    int flag=0;
    while(fgets(buf, MAX_BUF_LEN, file) != NULL){
       if(strncmp(buf, "startread", strlen("startread")) == 0){
          flag=1;
       }
       else if (strncmp(buf, "stopread", strlen("stopread")) == 0){
          flag=0;
       }

       if(flag){
          strncpy(line, buf, strlen(buf));
         // strncat(line, '\n', strlen('\n'));
       }

    // that's all!
    }
    fclose(file);

这应该有效。

于 2012-06-22T15:19:15.193 回答