关于C语言中的字符串的问题

时间:2014-04-17 02:26:11

标签: c string function

我还是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’

1 个答案:

答案 0 :(得分:2)

  1. 您在r初始化之前使用while(r != '\n'){

  2. toBe.field += *sField;应替换为strcpy(toBe.field[i], sField);

  3. 之类的内容
  4. field += ch;应替换为field[i] = ch;之类的内容,因为get_field() field是指向char的指针; field += '\0';应该同样修复。

  5. 顺便说一句,代码中存在许多潜在的缓冲区溢出问题,您可能还想修复它们。