gpt4 book ai didi

c - 关于C中字符串的问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:14 24 4
gpt4 key购买 nike

我对 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)然后获取该字符串并将其添加到“字段”,我认为它是这些 fstrings 的数组。 get_field() 似乎运行良好,但是当我尝试打印出我认为正在从 get_field 中编辑的 sField 时,我只得到一个 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. while(r != '\n'){

  2. 初始化之前,您正在使用 r
  3. toBe.field += *sField; 应替换为 strcpy(toBe.field[i], sField);

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

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

关于c - 关于C中字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com