我还是C的新手,我现在对如何使用字符串感到困惑。现在我有两个函数:get_field()和get_line()。
typedef char f_string[MAX_CHARS+1] ;
typedef struct {
int nfields ;
f_string field[MAX_FIELDS] ;
} csv_line ;
csv_line get_line() {
csv_line toBe;
f_string sField;
toBe.nfields = 0;
int r;
while(r != '\n'){
r = get_field(sField);
printf("sField: %d\n", *sField);
//toBe.field += *sField;
if(r != EOF){
toBe.nfields += 1;
}
//sField = *"";
}
return toBe;
}
int get_field(f_string field) {
char ch;
ch = getchar();
while(is_end_of_field(ch) == 0){
field += ch;
ch = getchar();
}
field += '\0';
return ch;
我正在尝试用它来解析标准输入中的一行直到它到达 结束字段条件(','' \ n'或EOF)然后获取该字符串并将其添加到"字段"我认为这是一系列的这些弦乐。 get_field()似乎运行正常但是当我尝试打印出sField时,我相信它是在get_field中编辑的,我只得到一个0.我在这里做错了什么? MAX_FIELDS设置为15,MAX_CHARS设置为20.当我尝试使用当前注释掉的行进行编译时得到的错误是......
error: invalid operands to binary + (have ‘char[15][21]’ and ‘int’)
error: incompatible types when assigning to type ‘f_string’ from type ‘char’
答案 0 :(得分:2)
您在r
初始化之前使用while(r != '\n'){
toBe.field += *sField;
应替换为strcpy(toBe.field[i], sField);
field += ch;
应替换为field[i] = ch;
之类的内容,因为get_field()
field
是指向char
的指针; field += '\0';
应该同样修复。
顺便说一句,代码中存在许多潜在的缓冲区溢出问题,您可能还想修复它们。