strtok功能无法正常运行

时间:2015-01-15 09:45:04

标签: c

LOG.txt文件:

2327 - Your account is created on 01/09/15 # 
2327 - Amount:100 withfrawed from your account on 01/09/15 #

此代码向我显示第一次编译时的输出和第二次编译时的其他输出。我犯了什么错误

#‎include‬<stdio.h>
#include<conio.h>
#include<string.h>
FILE *fp;

void main()
{
    int i=0;   
    char temp[10],log[10000],*token;
    char s1[2] = "#",s2[2] = "-",logger[100][70],no[100][10];
    clrscr();

    fp=fopen("LOG.TXT","r");

    while(fscanf(fp,"%s",temp)!=EOF)
    {
        strcat(log,temp);
        strcat(log," ");
    } 
    fclose(fp);
    printf("%s",log);
    token = strtok(log,s1);

    while(token!=NULL)
    {
        strcpy(logger[i],token);
        i++;
        token = strtok(NULL,s1);
    }

    i=0;
    token = strtok(logger[i],s2);
    while(token!=NULL)
    {
        strcpy(no[i],token);
        i++;
        token = strtok(logger[i],s2);
    }
    getch();
}

2 个答案:

答案 0 :(得分:2)

char log[10000];

此处log未初始化,因此strcat()将搜索NULL终止符,而log将不会拥有它,因为它是未初始化的,因此您需要在执行log之前初始化strcat() 1}}

使用未初始化的变量会导致未定义的行为,因此strtok()无法正常工作。

你可以做到

char log[10000] = {0};

memset(log,0,sizeof(log));

答案 1 :(得分:2)

你的问题很可能在这里:

strcat(log,temp);
strcat(log," ");

您没有初始化log,这意味着内容不确定,并且使用log这种方式会导致undefined behavior

请记住strcat查找字符串终止符'\0'以了解它应该从哪里开始追加,未初始化的本地非静态变量将具有看似随机的内容。