如何使用函数将字符串添加到结构?
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' 个问题:
- 您需要为
AddCar
和 ShowCar
提供 函数原型 ,然后再使用它们,否则编译器会假定它们 return int
然后在看到 实际 定义时抱怨。
- 您的
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解释。
我制作了一个停车系统,我在其中使用 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' 个问题:
- 您需要为
AddCar
和ShowCar
提供 函数原型 ,然后再使用它们,否则编译器会假定它们 returnint
然后在看到 实际 定义时抱怨。 - 您的
main
函数(正确地) returns0
但它被声明为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解释。