C - 指向动态结构数组的指针

标签 c arrays pointers struct

我遇到了指针问题。我有一个这样的结构:

typedef struct Concert {
    char* nameOfBand;
    char* location;} concert;
}

我想要一个动态的结构数组。

所以我需要创建一个变量来存储结构数组,然后向其中添加结构。我怎样才能做到这一点?

我尝试过这个:

//pointer to array   
concert** concertArray = (concert**) malloc(sizeof(concert)*5);

//new concert
concert newConcert;
newConcert.nameOfBand = "name1";
newConcert.location = "location1";

//adding item to array
*((*concertArray)+0) = newConcert;

但是编译失败。

最佳答案

正如这里通常出现的问题一样,您没有复制newConcert。您只是将指针放入数组中的本地(自动)变量,当您从函数返回时,该指针超出范围(不再存在)。使用 malloc 分配一个新的 Concert,然后填写数据(也对每个字符串使用 malloc!!)。以下是一个更完整的示例:

typedef struct Concert {
    char* nameOfBand;
    char* location;
} concert;

concert** concertArray;
int nConcerts;

int main()
{
    int i;
    concertArray = malloc(sizeof(concert *)*5); // allocate array
    addConcert("name1", "location1");           // add element

    // print elements
    for (i=0; i<nConcerts; i++)
        printf("Name: %s, location: %s\n", concertArray[i]->nameOfBand, concertArray[i]->location);

    // free concerts
    for (i=0; i<nConcerts; i++) {
        free(concertArray[i]->nameOfBand);
        free(concertArray[i]->location);
        free(concertArray[i]);
    }
    free(concertArray);
    return 0;
}
void addConcert(char *name, char *location)
{
    concert *newConcert = malloc(sizeof(concert));
    newConcert->nameOfBand = malloc(strlen(name)+1); strcpy(newConcert->nameOfBand, name);
    newConcert->location = malloc(strlen(location)+1);  strcpy(newConcert->location, location);

    concertArray[nConcerts++] = newConcert;
}

关于C - 指向动态结构数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47226251/

相关文章:

c - 如何使用 BFS 查找 C 图中两个顶点之间的所有最短路径?

c - 这是编译器仅通过使用位运算来划分的方式吗?

c - C 编译器如何解释源代码中的空格?

algorithm - 数组中不同元素的数量

c++ - 链表/vector 中的指针

c++ - 是否可以将常规指针转换为指向类字段的指针

python - 用十进制数 64165 位的 `n ** n` 计算 `n`(n 乘以 n)需要多长时间?

python - 从单独行上的字符串文本文件生成整数数组。更好的方法?

c - 指向二维数组的指针

ios - 基础框架中的结构声明