Tôi đã viết đoạn mã sau bằng C++ nhưng thấy rằng tôi phải chuyển đổi nó sang C. Tôi không phải là lập trình viên C hay thậm chí là C++, vui lòng trợ giúp.
Ai đó có thể giúp tôi thay đổi phương thức này thành hướng dẫn C, cụ thể là triển khai vectơ, phần sau sẽ không được biên dịch. Tôi đã loại bỏ độ phức tạp để giữ cho nó đơn giản. Cảm ơn vì sự mong đợi.
__declspec(dllexport) std::vector WINAPI ABC(char *strVal)
{
MY_STRUCT f;
std::vector danh sách = std::vector();
trong khi (*dddd)
{ /*thực hiện các thao tác sau cho mọi tính năng trong tệp giấy phép*/
f.attrib_num = fi.attrib_num;
f.attrib_lic = fi.attrib_lic;
list.push_back(f);
} /* kết thúc while(conf) */
dddd++;
printf("\n");
} /* kết thúc trong khi (*dddd) */
trở lại flist;
}
Đây là cách triển khai (và cách sử dụng) của mảng cấu trúc động trong C. Bạn có thể điều chỉnh nó cho phù hợp với cấu trúc của riêng bạn; tôi đã đăng bài này trước đây trong phần đánh giá mã.
#include
#include
#include
cấu trúc typedef
{
ID int;
ký tự * tên;
} Học sinh;
// mảng cấu trúc
cấu trúc typedef
{
Sinh viên *mảng;
size_t đã sử dụng;
kích thước size_t;
} Mảng;
void initArray(Mảng *a, size_t initSize)
{
int i = 0;
// Cấp phát không gian ban đầu
a->array = malloc(initialSize * sizeof(Student));
a->used = 0; // không có phần tử nào được sử dụng
a->size = initSize; // số phần tử có sẵn
// Khởi tạo tất cả giá trị của mảng về 0
for(i = 0; i
{
memset(&a->array[i],0,sizeof(Student));
}
}
// Thêm phần tử vào mảng
void addElement(Array *a, Phần tử sinh viên)
{
int i = 0;
nếu (a->được sử dụng == a->kích thước)
{
a->kích thước *= 2;
a->array = realloc(a->array, a->size * sizeof(Student));
// Khởi tạo phần tử cuối cùng/mới của mảng được phân bổ lại
for(i = a->used; isize; i++)
{
memset(&a->array[i],0,sizeof(Student));
}
}
// Sao chép tên
a->array[a->used].name = (char*)malloc(strlen(element.name) + 1);
strcpy(a->array[a->used].name, element.name);
// Sao chép ID
a->mảng[a->used].ID=element.ID;
a->được sử dụng++;
}
void freeArray(Array *a)
{
int i = 0;
// Giải phóng tất cả các biến tên của từng phần tử mảng trước
for(i=0; iused; i++)
{
free(a->array[i].name);
a->mảng[i].name=NULL;
}
// Bây giờ giải phóng mảng
miễn phí(a->mảng);
a->mảng = NULL;
a->đã sử dụng = 0;
a->kích thước = 0;
}
int main(int argc, const char * argv[])
{
Mảng a;
Sinh viên x,y,z;
x.ID = 20;
x.name=malloc(strlen("stud1") + 1);
strcpy(x.name,"stud1");
y.ID = 30;
y.name=malloc(strlen("student2") + 1);
strcpy(y.name,"student2");
z.ID = 40;
z.name=malloc(strlen("student3") + 1);
strcpy(z.name,"student3");
// Khởi tạo mảng, đừng quên
initArray(&a, 5);
// Thêm phần tử
addElement(&a, x);
addElement(&a, y);
addElement(&a, z);
//In phần tử
printf("%d\n", a.array[0].ID);
printf("%s\n", a.array[0].name);
printf("%d\n", a.array[1].ID);
printf("%s\n", a.array[1].name);
printf("%d\n", a.array[2].ID);
printf("%s\n", a.array[2].name);
// Mảng miễn phí
// đừng quên
freeArray(&a);
miễn phí(x.name);
miễn phí(y.name);
miễn phí(z.name);
return 0;
}
Tôi là một lập trình viên xuất sắc, rất giỏi!