如何修改结构字符串属性或使用函数更新结构

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;
}