如何使用函数将字符串添加到结构?

How do I add a string to a struct using a function?

我制作了一个停车系统,我在其中使用 void 函数输入了车辆的信息。 但我不知道如何使用 void 将字符串放入结构中。

这是我的代码。 我的错误在哪里?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct car {
  char plate[10];
  char model[20];
  char color[10];
};

void main() {

  struct car c[4];

  AddCar(c[0], "43ds43", "ford", "blue");
  ShowCar(c[0]);

  return 0;
}
// I guess my mistake is here
void AddCar(struct car c, char p[10], char m[10], char r[10]) {
  strcpy(c.plate, p);
  strcpy(c.model, m);
  strcpy(c.color, r);
}

void ShowCar(struct car c) {
  printf("Plate: %s   Model: %s  Color: %s\n-------", c.plate, c.model, c.color);
}

您正在复制 struct car c。将其作为指针传递:

 AddCar(&c[0], "43ds43", "ford", "blue");
 // ...
 void AddCar(struct car *c,char p[10],char m[10],char r[10]) {
    strcpy(c->plate,p);
    strcpy(c->model,m);
    strcpy(c->color,r);
 }

您的代码中有很多错误!首先解决 'other' 个问题:

  1. 您需要为 AddCarShowCar 提供 函数原型 ,然后再使用它们,否则编译器会假定它们 return int 然后在看到 实际 定义时抱怨。
  2. 您的 main 函数(正确地) returns 0 但它被声明为 void - 所以将其更改为 int main(...).

和 'real' 问题:您正在将 car 结构传递给 AddCar 按值 - 这意味着已制作副本,然后传递给函数。对该副本的更改将 不会 影响调用模块中的变量(即 main 中的变量)。要解决此问题,您需要将 pointer 传递给 car 结构,并使用 -> 运算符(代替 . 运算符)在那个函数中。

这是您的代码的 'fixed' 版本,在我做出重大更改的地方添加了注释:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct car {
    char plate[10];
    char model[20];
    char color[10];
};

// Add your functions' prototypes before you use them...
void AddCar(struct car *c, char p[10], char m[10], char r[10]);
void ShowCar(struct car c);

int main() // If you return an int, you must declare that you do!
{
    struct car c[4];
    // Here, we pass a pointer to `c[0]` by adding the `&` (address of)...
    AddCar(&c[0], "43ds43", "ford", "blue");
    ShowCar(c[0]);
    return 0;
}

void AddCar(struct car *c, char p[10], char m[10], char r[10])
{                   // ^ To modify a variable, the function needs a POINTER to it!
    strcpy(c->plate, p);
    strcpy(c->model, m);  // For pointers to structures, we can use "->" in place of "."
    strcpy(c->color, r);
}

void ShowCar(struct car c)
{
    printf("Plate: %s   Model: %s  Color: %s\n-------", c.plate, c.model, c.color);
}

随时要求进一步澄清and/or解释。