如何在C中获得由分隔符分隔的标记位置

时间:2013-10-14 06:23:34

标签: c strtok

我的文字文件如下:

at:x:25:25:批处理作业守护程序:/ var / spool / atjobs:/ bin / bash

avahi:x:109:111:Avahi的用户:/ var / run / avahi-daemon:/ bin / false

现在我希望通过分界符分隔令牌的位置。例如,在位置1,x - 位置2,25 - 位置3,等等。

现在我的for循环不起作用(int i = 0; i

#include<stdio.h>
#include<string.h>


int main(int argc, char *argv[])
{
char *str, *saveptr;
char ch[100];
char *sp;
FILE *f;
int j;
char searchString[20];
char *src;
f = fopen("passwd", "r");
if (f == NULL)
{
    printf("Error while opening the file");
    //exit(1);
}
char *dup;
while (fgets(ch, sizeof ch, f)!= NULL)
{
    /*printf("%s\n", ch); */
      dup = strdup(ch);

    for (j = 1, str = ch; ; j++, str= NULL)
    {
         for(int i = 0;i < str;i++)
         {
             char *token = strtok_r(str, ":", &saveptr);
             if (token == NULL)
             break;

             src[i] = token;
             printf("%s", src[i]);
         }
         //printf("%s---\n---", token);
         //printf("%s",token);


if (strstr(token, argv[2]) != NULL)
         {

                printf(dup);
         }

    }





 }


fclose(f);

}

1 个答案:

答案 0 :(得分:0)

for(int i = 0;i < str;i++)

你做错了。您正在比较大于i = 0的i with an address,因此此循环不会启动。达到NULL时,我看到你正在打破循环,所以这应该是你的循环

for(int i = 0; ;i++)