如何修改结构字符串属性或使用函数更新结构
how to modify struct string attribute or update struct with a function
我的最终目标是用 sprintf
初始化 X.fmt
。我的 第一个解决方案 只是修改 fmt 属性,但没有奏效。然后我将参数设置为 struct student_t &X 以更新结构,但它也没有用。
这是我的第一个解决方案:
char* fmt_str ( struct student_t X )
{
char *buf;
sprintf( buf, "%s|%s|%.2f",
X.id,
X.name,
X.gpa );
return (buf);
}
我需要帮助找到修改 fmt 属性的正确解决方案。但是也接受更新结构的解决方案。
char *buf;
sprintf( buf, format, ...);
sprintf
requires a pointer to a buffer where the resulting C-string is stored.
该缓冲区应该足够大以包含结果字符串。
您可以更改方法的签名以接受要使用的缓冲区,例如:
char* fmt_str(struct student_t X, char* buf) {
sprintf(buf, "%s|%s|%.2f", X.id, X.name, X.gpa);
return buf;
}
或者根据您的评论判断
My final goal is to initialize X.fmt
您可以传递 X
by-reference(作为指针而不是结构)并直接修改它的 .fmt
。这当然是假设结果 char[]
足以容纳您写入的字符串。
struct student_t {
const char* id;
const char* name;
const float gpa;
char fmt[1024];
};
char* fmt_str(struct student_t* X) {
sprintf(X->fmt, "%s|%s|%.2f", X->id, X->name, X->gpa);
return X->fmt;
}
我的最终目标是用 sprintf
初始化 X.fmt
。我的 第一个解决方案 只是修改 fmt 属性,但没有奏效。然后我将参数设置为 struct student_t &X 以更新结构,但它也没有用。
这是我的第一个解决方案:
char* fmt_str ( struct student_t X )
{
char *buf;
sprintf( buf, "%s|%s|%.2f",
X.id,
X.name,
X.gpa );
return (buf);
}
我需要帮助找到修改 fmt 属性的正确解决方案。但是也接受更新结构的解决方案。
char *buf;
sprintf( buf, format, ...);
sprintf
requires a pointer to a buffer where the resulting C-string is stored.
该缓冲区应该足够大以包含结果字符串。
您可以更改方法的签名以接受要使用的缓冲区,例如:
char* fmt_str(struct student_t X, char* buf) {
sprintf(buf, "%s|%s|%.2f", X.id, X.name, X.gpa);
return buf;
}
或者根据您的评论判断
My final goal is to initialize X.fmt
您可以传递 X
by-reference(作为指针而不是结构)并直接修改它的 .fmt
。这当然是假设结果 char[]
足以容纳您写入的字符串。
struct student_t {
const char* id;
const char* name;
const float gpa;
char fmt[1024];
};
char* fmt_str(struct student_t* X) {
sprintf(X->fmt, "%s|%s|%.2f", X->id, X->name, X->gpa);
return X->fmt;
}