我用FString给另一个Fstring赋值,为什么结果是一个指针
时间: 2024-02-25 09:58:53 浏览: 18
如果你使用了FString的赋值操作符将一个FString赋值给另一个FString,而结果是一个指针,可能是因为你在使用FString的赋值操作符时,将一个C-style字符串(即char指针)赋值给了FString。此时,FString会将char指针作为字符串的地址,而不是将字符串的内容拷贝到新的FString对象中。
例如,以下代码将会导致FString指向一个char指针:
```c++
const char* MyString = "Hello World";
FString MyFString = MyString; // 这里将char指针赋值给FString
```
如果你想要将一个C-style字符串拷贝到FString中,你可以使用FString的构造函数:
```c++
const char* MyString = "Hello World";
FString MyFString(MyString); // 使用FString的构造函数将char指针拷贝到FString中
```
这样,MyFString将会包含一个拷贝自"MyString"的字符串。
相关问题
用c语言指针实现一个结构体数组对另一个结构体数组的赋值
以下是用C语言指针实现一个结构体数组对另一个结构体数组的赋值的示例代码:
```c
#include <stdio.h>
#include <string.h>
struct student {
int num;
char name[10];
char sex;
double height;};
int main() {
struct student stus1[3] = {{1001, "Tom", 'M', 1.75}, {1002, "Jerry", 'F', 1.65}, {1003, "Mike", 'M', 1.80}};
struct student stus2[3];
struct student *p1, *p2;
p1 = stus1;
p2 = stus2;
memcpy(p2, p1, sizeof(stus1));
for (int i = 0; i < 3; i++) {
printf("stus2[%d]: num=%d, name=%s, sex=%c, height=%.2f\n", i, (p2+i)->num, (p2+i)->name, (p2+i)->sex, (p2+i)->height);
}
return 0;
}
```
解释如下:
1. 定义了一个结构体`student`,包含学号、姓名、性别和身高四个成员变量。
2. 定义了两个结构体数组`stus1`和`stus2`,分别用于存储学生信息。
3. 定义了两个指向结构体的指针`p1`和`p2`,并将`p1`指向`stus1`数组的首元素,将`p2`指向`stus2`数组的首元素。
4. 使用`memcpy`函数将`stus1`数组中的数据复制到`stus2`数组中。
5. 使用指针遍历`stus2`数组,并输出每个学生的信息。
用c语言写一个成绩管理系统,要求用动态链表,注释说明
以下是一个用动态链表实现的简单成绩管理系统的示例代码,注释也包含了代码的详细说明:
```C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义学生结构体
typedef struct student {
char name[20];
int id;
float score;
struct student *next;
} Student;
//函数声明
Student* create_student(char name[], int id, float score);
void add_student(Student **head, Student *new_student);
void print_students(Student *head);
void free_students(Student *head);
int main() {
Student *head = NULL; //初始化链表头指针为空
int choice = 0;
char name[20];
int id;
float score;
while (1) {
//打印菜单
printf("\n\n");
printf("1. 添加学生\n");
printf("2. 显示所有学生\n");
printf("3. 退出\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1: //添加学生
printf("请输入学生姓名:");
scanf("%s", name);
printf("请输入学生学号:");
scanf("%d", &id);
printf("请输入学生成绩:");
scanf("%f", &score);
Student *new_student = create_student(name, id, score);
add_student(&head, new_student);
printf("添加成功!\n");
break;
case 2: //显示所有学生
print_students(head);
break;
case 3: //退出
free_students(head);
printf("再见!\n");
return 0;
default: //输入错误
printf("输入错误,请重新输入!\n");
break;
}
}
}
//创建学生结构体
Student* create_student(char name[], int id, float score) {
Student *new_student = (Student*)malloc(sizeof(Student)); //分配内存空间
strcpy(new_student->name, name); //将参数赋值给结构体成员
new_student->id = id;
new_student->score = score;
new_student->next = NULL; //新结构体的指针指向 NULL
return new_student; //返回新的结构体指针
}
//添加学生到链表尾部
void add_student(Student **head, Student *new_student) {
if (*head == NULL) { //链表为空,将新学生设置为头结点
*head = new_student;
} else {
Student *current = *head; //从头结点开始遍历
while (current->next != NULL) { //找到最后一个结点
current = current->next;
}
current->next = new_student; //将新学生添加到链表尾部
}
}
//打印所有学生信息
void print_students(Student *head) {
if (head == NULL) { //链表为空
printf("没有学生信息!\n");
} else {
Student *current = head; //从头结点开始遍历
printf("姓名\t学号\t成绩\n");
while (current != NULL) { //遍历整个链表
printf("%s\t%d\t%.2f\n", current->name, current->id, current->score);
current = current->next;
}
}
}
//释放链表内存空间
void free_students(Student *head) {
Student *current = head;
while (current != NULL) { //遍历整个链表
Student *temp = current;
current = current->next;
free(temp); //释放结构体内存空间
}
}
```
这个程序实现了一个简单的成绩管理系统,可以添加学生信息、显示所有学生信息、退出程序。其中,`Student` 结构体包含学生的姓名、学号和成绩,以及一个指向下一个学生的指针。链表使用动态内存分配实现,通过 `create_student` 函数创建新的学生结构体,通过 `add_student` 函数将新的学生添加到链表尾部,通过 `print_students` 函数打印所有学生信息,通过 `free_students` 函数释放链表内存空间。主函数中使用一个无限循环和菜单选择实现程序的交互。