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();
}
答案 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'
以了解它应该从哪里开始追加,未初始化的本地非静态变量将具有看似随机的内容。