繁体   English   中英

读取文件并通过strtok在c中标记

[英]Read file and tokenize by strtok in c

在此程序中,我想读取一个文件并将其转换为字符串,并用空格,\\ n,逗号和+将它们标记化,但是我正在无限执行第一行

#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
char ch,buff[500],bb[500];
int i=0;
fp=fopen("i.c","r");
if(fp==NULL) printf("File not opened");
else{
    printf("File opened successfully\n");
    ch=getc(fp);
    while(ch!=EOF){
        fgets(buff,500,fp);
       strcat(bb,buff);
    ch=getc(fp);
 }
char *tok=strtok(bb,"\n ,+=");
while(tok!=NULL){
printf("%s",tok);
tok=strtok(bb,"\n ,+=");
}
}
}

这是我正在读取ic的文件

#include<stdio.h>
#include<stdlib.h>
int main()
{
int num1=5,num2=6,num3;
char str[10]="hello";
num3=num1+num2;
printf("%s:%d",str,num3);
}

解:

  • 不应使用while(ch!=EOF)因为它具有意外的行为。
  • 使用fscanf读取行。 使用ret整数,如果文件结束,则返回EOF;如果未将行扫描到变量中,则返回0
  • 在获取令牌时,您应该传递NULL而不是指针。 tok=strtok(NULL,"\\n ,+="); 而不是tok=strtok(bb,"\\n ,+="); 码:

     #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { FILE *fp; char ch,line[500],bb[1000] = ""; // initialize bb int i=0,ret; fp=fopen("ic","r"); if(fp==NULL) printf("File not opened"); else { printf("File opened successfully\\n"); while(ret = fscanf(fp," %s ", line)) // use of fscanf { if(ret == EOF) { break; } strcat(bb,line); strcat(bb,"\\n"); } char *tok=strtok(bb,"\\n ,+="); while(tok!=NULL) { printf("%s",tok); tok=strtok(NULL,"\\n ,+="); // NULL instead of pointer } } } 

    在c中strtok:

  • 对该函数的调用序列将str分成令牌,令牌是连续字符的序列,这些连续字符由作为定界符一部分的任何字符分隔。

  • 首次调用时,该函数需要一个C字符串作为str的参数,该字符串的第一个字符用作扫描令牌的起始位置。 在随后的调用中,该函数需要一个空指针,并使用最后一个标记结束后的位置作为扫描的新起始位置。

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM