C 使用strtok()分解字符串并将其放入数组
我正在编写一个基本程序,它接受一个CSV文件,打印第一个字段,并对其他字段进行数值计算 我想把所有的数值场放到一个数组中,但每次我这样做,试图访问数组中的一个随机元素,它就会打印出整个数组 我的CSV文件是:C 使用strtok()分解字符串并将其放入数组,c,arrays,csv,C,Arrays,Csv,我正在编写一个基本程序,它接受一个CSV文件,打印第一个字段,并对其他字段进行数值计算 我想把所有的数值场放到一个数组中,但每次我这样做,试图访问数组中的一个随机元素,它就会打印出整个数组 我的CSV文件是: Exp1,10,12,13 Exp2,15,16,19 我正在尝试访问第二个字段,以便打印 Exp1 12 Exp2 16 但是相反,我得到了 Exp1 101213 Exp2 151619 如果有人能提供一些建议。这是我的代码: #define DELIM "," int mai
Exp1,10,12,13
Exp2,15,16,19
我正在尝试访问第二个字段,以便打印
Exp1 12
Exp2 16
但是相反,我得到了
Exp1 101213
Exp2 151619
如果有人能提供一些建议。这是我的代码:
#define DELIM ","
int main(int argc, char *argv[])
{
if(argc == 2) {
FILE *txt_file;
txt_file = fopen(argv[1], "rt");
if(!txt_file) {
printf("File does not exist.\n");
return 1;
}
char tmp[4096];
char data[4096];
char expName[100];
char *tok;
int i;
while(1){
if(!fgets(tmp, sizeof(tmp), txt_file)) break;
//prints the experiment name
tok = strtok(tmp, DELIM);
strncpy(expName, tok, sizeof(expName));
printf("\n%s ", expName);
while(tok != NULL) {
tok = strtok(NULL, DELIM);
//puts data fields into an array
for(i=0; i < sizeof(data); i++) {
if(tok != NULL) {
data[i] = atoi(tok);
}
}
printf("%d", data[1]);
}
}
fclose(txt_file);
return 0;
}
#定义DELIM“
int main(int argc,char*argv[])
{
如果(argc==2){
文件*txt_文件;
txt_file=fopen(argv[1],“rt”);
如果(!txt_文件){
printf(“文件不存在。\n”);
返回1;
}
char-tmp[4096];
字符数据[4096];
char expName[100];
char*tok;
int i;
而(1){
如果(!fgets(tmp,sizeof(tmp),txt_文件))中断;
//打印实验名称
tok=strtok(tmp,DELIM);
strncpy(expName、tok、sizeof(expName));
printf(“\n%s”,expName);
while(tok!=NULL){
tok=strtok(空,DELIM);
//将数据字段放入数组中
对于(i=0;i
要修复的示例
char tmp[4096];
int data[2048];
char expName[100];
char *tok;
int i=0;
while(fgets(tmp, sizeof(tmp), txt_file)){
tok = strtok(tmp, DELIM);
strncpy(expName, tok, sizeof(expName));
printf("\n%s ", expName);
while((tok = strtok(NULL, DELIM))!=NULL){
data[i++] = atoi(tok);
}
printf("%d", data[1]);
i = 0;
}
修改后的代码段:
int data[20]; // change 20 to a reasonable value
...
while (1)
{ if (!fgets(tmp, sizeof(tmp), txt_file))
break;
//prints the experiment name
tok = strtok(tmp, DELIM);
strncpy(expName, tok, sizeof(expName));
printf("\n%s ", expName);
i = 0;
tok = strtok(NULL, DELIM);
while (tok != NULL)
{ //puts data fields into an array
data[i++] = atoi(tok);
if (i == 20)
break;
tok = strtok(NULL, DELIM);
}
if (i > 1)
printf("%d", data[1]);
}