C 中的函数 strtok() 和混合变量类型
function strtok() and mixed variable type in C
我试图从文件中读取数据并将数据插入结构数组,文件格式如下:
...
0087|www.google.com|2017.08.07 12:13:36
0150|www.yahoo.com|2018.10.06 04:03:12
...
其中数据类型由“|
”分隔,然后我使用 strtok()
分隔数据,这对字符串类型 timestamp
和 domain
, 我能够将数据正确存储在结构中,但是,对于 customerid
数据类型,我只能在结构中获取内存地址,我该如何解决这个问题?谢谢!
#include <stdio.h>
#include <string.h>
struct AccessRecord {
int customerID;
char domain[256];
char timestamp[21];
};
struct AccessRecord rc[1000];
int main()
{
int i = 0; char line[300];
const char s[2] = "|";
FILE *fd;
fd = fopen("./example_data.ipb","r");
while (fgets(line, sizeof(line), fd)) {
char *token;
token = strtok(line, s);
rc[i].customerID = token;
token = strtok(NULL, s);
strcpy (rc[i].domain , token);
token = strtok(NULL, s);
strcpy (rc[i].timestamp , token);
token = strtok(NULL, s);
i++;
}
fclose(fd);
return 0;
}
请注意您提取数据的两种不同方式:
token = strtok(line, s);
rc[i].customerID = token; // assignment of char* (to int, so suspect)
token = strtok(NULL, s);
strcpy (rc[i].domain , token); // string copying
尽管 两者 都是字符串。尽管客户 ID 是数字 数据, 它存储为一个字符串,应该这样处理。
也就是说,由于是结构体中的整数,所以可以边读边转换,比如with:
token = strtok(line, s);
rc[i].customerID = strtol(token, NULL, 10);
我试图从文件中读取数据并将数据插入结构数组,文件格式如下:
...
0087|www.google.com|2017.08.07 12:13:36
0150|www.yahoo.com|2018.10.06 04:03:12
...
其中数据类型由“|
”分隔,然后我使用 strtok()
分隔数据,这对字符串类型 timestamp
和 domain
, 我能够将数据正确存储在结构中,但是,对于 customerid
数据类型,我只能在结构中获取内存地址,我该如何解决这个问题?谢谢!
#include <stdio.h>
#include <string.h>
struct AccessRecord {
int customerID;
char domain[256];
char timestamp[21];
};
struct AccessRecord rc[1000];
int main()
{
int i = 0; char line[300];
const char s[2] = "|";
FILE *fd;
fd = fopen("./example_data.ipb","r");
while (fgets(line, sizeof(line), fd)) {
char *token;
token = strtok(line, s);
rc[i].customerID = token;
token = strtok(NULL, s);
strcpy (rc[i].domain , token);
token = strtok(NULL, s);
strcpy (rc[i].timestamp , token);
token = strtok(NULL, s);
i++;
}
fclose(fd);
return 0;
}
请注意您提取数据的两种不同方式:
token = strtok(line, s);
rc[i].customerID = token; // assignment of char* (to int, so suspect)
token = strtok(NULL, s);
strcpy (rc[i].domain , token); // string copying
尽管 两者 都是字符串。尽管客户 ID 是数字 数据, 它存储为一个字符串,应该这样处理。
也就是说,由于是结构体中的整数,所以可以边读边转换,比如with:
token = strtok(line, s);
rc[i].customerID = strtol(token, NULL, 10);