【发布时间】:2021-03-17 01:08:00
【问题描述】:
我正在尝试用链表节点填充数组。但我遇到了一些错误。
- 列表结构
- fillArray 方法
struct List
{
char frequency[STRING_LEN];
char word[STRING_LEN];
char lineOrder[STRING_LEN];
struct List *next;
};
void fillArray(struct List *nodesArr[50]){
int a=0;
struct List *ptr = head; // head is my first node for linkedlist. I have created this earlier.
while(ptr->next!=NULL){
*nodesArr[a]->frequency=ptr->frequency; // I get error here
*nodesArr[a]->word=ptr->word; // and here *assignment to 'char' from 'char *' makes integer from* //*pointer without a cast*
ptr=ptr->next;
a++;
}
}
*assignment to 'char' from 'char *' makes integer from pointer without a cast [-Wint-conversion]gcc* error
[error][1]
[error2][1]
我也在 main func 中声明 nodesArr,如下所示:
struct List *nodesArr[length()];
我这样调用fillArray方法:
fillArray(*nodesArr); // How should I put an array as a parameter?
我不知道如何在函数中使用 struct array 作为参数,以及如何避免转换错误。 任何帮助,将不胜感激 提前致谢
编辑 我已经将这样的 fillArray 方法转换为更清晰。
void fillArray(struct List **nodesArr){
int a=0;
struct List *ptr = head;
while(ptr->next!=NULL){
strcpy(nodesArr[a]->frequency,ptr->frequency);
strcpy(nodesArr[a]->word,ptr->word);
ptr=ptr->next;
a++;
}
}
编辑2 head 是全局定义的
struct List *head = NULL;
我用这种方法填充头部链表:
void insertFirst(char *data, char *frequency, char *lineOrder)
{
struct List *link = (struct List *)malloc(sizeof(struct List));
strcpy(link->word, data); // To copy the elements of data to new node's word
strcpy(link->frequency, frequency);
strcpy(link->lineOrder, lineOrder);
link->next = head;
head = link;
}
【问题讨论】:
-
请用确切的错误更新问题。
-
struct List *nodesArr[50]是一个由 50 个 指针 指向struct List的数组 -
从 'char *' 对 'char' 的 1-assignment 从指针生成整数而无需强制转换 [-Wint-conversion]gcc 2-从不兼容的指针类型传递 'printArray' 的参数 1
-
char frequency[STRING_LEN];和char word[STRING_LEN];是数组,不能是左值。你的类型看起来完全错误,因为你解释了你想要完成的事情。如果您只想要一个结构数组,请参阅C Source #2 Example on Godbolt,否则请提供A Minimal, Complete, and Verifiable Example (MCVE)。 -
感谢您的更新,但它不是 MCVE。例如,
struct List *ptr = head;中的head是什么,以及在您第一次调用fillArray()之前它是如何声明和初始化的?如果它被初始化NULL,你将在ptr=ptr->next;进行SegFault
标签: arrays c parameters casting linked-list