gpt4 book ai didi

C语言返回类型

转载 作者:行者123 更新时间:2023-11-30 21:25:46 24 4
gpt4 key购买 nike

我面临返回类型的问题。我使用下面的文章来实现 vector ,我想在结构中添加一个字段。

http://www.happybearsoftware.com/implementing-a-dynamic-array.html

我添加如下:

typedef struct {
int size; // slots used so far
int capacity; // total available slots
int *data; // array of integers we're storing
char* dvalue ;
} Vector;

这是头文件中的定义

char* vector_get(Vector *vector, int index);

这是vector.c中的代码

char* vector_get(Vector *vector, int index) {
printf("Passed 1");
if (index >= vector->size || index < 0) {
printf("Index %d out of bounds for vector of size %d\n", index, vector->size);
exit(1);
}
// it shows red underline but there is no compilation error but only run time.
return vector->dvalue[index];
}

我使用的是 Visual Studio 2012。

请帮助我,我哪里做错了,为什么我无法检索数据并且崩溃了。

请帮助我。

谢谢

这是附加信息,我如何设置值。我必须存储 int 和 string 值,然后也检索它们。

char* vector_get(Vector *vector, int index);

void vector_set(Vector *vector, int index, int value,char* dvalue);

void vector_set(Vector *vector, int index, int value, char* dvalue) {
// zero fill the vector up to the desired index
while (index >= vector->size) {
vector_append(vector, 0);
}

// set the value at the desired index
vector->data[index] = value;
vector->dvalue[index] = dvalue;
}

char* vector_get(Vector *vector, int index) {
printf("Passed 1");
if (index >= vector->size || index < 0) {
printf("Index %d out of bounds for vector of size %d\n", index, vector->size);
exit(1);
}

return vector->dvalue[index]; // it shows red underline but there is no compilation error but only run time.
}

最佳答案

首先,需要将dvalue的类型更改为char **:

typedef struct {
int size; // slots used so far
int capacity; // total available slots
int *data; // array of integers we're storing
char** dvalue; // <--- Notice the change here
} Vector;

然后,您需要为dvalue分配空间,就像为data分配空间一样。您没有在任何代码中显示这一点,但大概您有这样的内容:

vector->data = malloc(vector->capacity * sizeof(int));

所以你还需要这个:

vector->dvalue = malloc(vector->capacity * sizeof(char *));

最后,当您设置dvalue时,您可能需要复制该字符串,具体取决于您传递给vector_set()的内容:

// Possibly wrong if dvalue is not persistent.
// vector->dvalue[index] = dvalue;

// Make allocated copy instead. If you don't have strdup(), write it yourself.
vector->dvalue[index] = strdup(dvalue);

关于C语言返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com