gpt4 book ai didi

c - 从字符串加载结构体

转载 作者:行者123 更新时间:2023-11-30 16:46:17 25 4
gpt4 key购买 nike

我有一个具有以下格式的字符串:

Surname(7characters) Name(7characters) ID(8characters) Salary(5characters)

我想将其加载到结构员工中:

typedef struct{
char surName[20];
char name[20];
long int id;
int salary;
}employee;

void loadEmployee(employee *empl,char line[]){
char *aux=line+strlen(line);
*aux='\0';
aux-=6;
sscanf(aux+1,"%d",&empl->salary);

*aux='\0';
aux-=9;
sscanf(aux+1,"%ld",&empl->id);

*aux='\0';
aux-=8;
sscanf(aux+1,"%s",empl->name); //!!!!ERROR

*aux='\0';
sscanf(line,"%s",empl->surname);//!!!!ERROR
}

int main(){
employee empl;
loadEmployee(&empl,"Friedman John 37243365 50000");
return 0;
}

错误指出字符格式指针arg。我做错了什么?

最佳答案

继续评论,您可以大大简化您的 loadEmployee 函数(并通过让它提供有意义的返回类型来改进您的验证,可以检查成功/失败)通过在一次调用中解析字符串并在失败时返回 NULL 指针,例如

#include <stdio.h>

typedef struct {
char surname[20];
char name[20];
long int id;
int salary;
} employee;

employee *loadEmployee (employee *empl, char *line)
{
if (sscanf (line, "%19s %19s %ld %d",
empl->surname, empl->name, &(empl->id), &(empl->salary)) == 4)
return empl;

return NULL;
}

int main (void) {

employee empl;

if (loadEmployee (&empl, "Friedman Jhon 37243365 50000"))
printf ("empl.name: %s\nempl.surname: %s\n"
"empl.id: %ld\nempl.salary: %d\n",
empl.name, empl.surname, empl.id, empl.salary);

return 0;
}

示例使用/输出

$ ./bin/stringstruct
empl.name: Jhon
empl.surname: Friedman
empl.id: 37243365
empl.salary: 50000

关于c - 从字符串加载结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827460/

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