我正在尝试阅读csv。将文件放入结构体中,结构体在单独的.h文件中创建,并包含在#include“filedata.h”中。然而,我在阅读结构时遇到了麻烦。
我的结构在我的filedata.h文件中定义为
#ifndef filedata
#define filedata
typedef struct {
char *data1;
char *data2;
char yN;
}filedata;
#endif
我的.c文件包含:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "filedata.h"
filedata data[5]; //instantiates struct?
int main(){
const char s[3] = ", ";
int i = 0;
char line [256];
char *temp;
FILE *fp = fopen("filename.csv", "r");
if(fp==NULL){
perror("File not found!\n");
return 1;}
while(fgets(line, sizeof(line), fp)){
temp = strtok(line, s);
strcpy(data[i].&data1, temp);
<etc>
i++;}
fclose(fp);
}
我一直在'&amp;'之前获得“预期的标识符”令牌”。如何正确访问结构?提前谢谢。
答案 0 :(得分:0)
您需要为字符串data[i].data1
预留空间,在malloc
之前使用strcpy
:
size_t sz = strlen(temp) + 1;
/* You don't need the address of (&) operator, data1 is already a pointer */
data[i].data1 = malloc(sz);
if (data[i].data1 == NULL) {
perror("malloc");
exit(EXIT_FAILURE);
}
strcpy(data[i].data1, temp);
或strdup
(不是标准但在许多实现中可用):
data[i].data1 = strdup(temp);
if (data[i].data1 == NULL) {
perror("strdup");
exit(EXIT_FAILURE);
}
在两种情况下都不再需要free(data[i].data1);
时,不要忘记。
答案 1 :(得分:0)
strcpy(data[i].&data1, temp);
这是一个语法错误,因为您无法在变量的中间进行引用。
您根本不需要引用,因为data1
字段已经是char上的指针。您只需要正确分配(复制)字符串并像这样分配:
data[i].data1 = strdup(strtok(line, s))
由于strtok
没有为您分配内存,因此返回的值绑定到line
(下一行读取:您的数据将丢失)
(BTW不需要temp
)