Линейный список и ошибка Warning: passing arg 1 of `strcpy' from incompatible pointer type - C (СИ)
Формулировка задачи:
Проблема с написанием проги (линейный список). Язык Си.
Во-первых выдает предупреждение:
\1\main.c||In function `CreateNode':|
\1\main.c|22|warning: passing arg 1 of `strcpy' from incompatible pointer type|
\1\main.c|22|warning: passing arg 2 of `strcpy' from incompatible pointer type|
||=== Build finished: 0 errors, 2 warnings ===|
Во-вторых:
В документе input.txt несколько чисел. А в документ output1.txt прога записывает число 4007552- то есть выдает ошибку.
Помогите, пожалуйста, разобраться.
Листинг программы
- #include <stdio.h>
- #include <string.h>
- #include <windows.h>
- #include <malloc.h>
- int a=0,b=0,ch1=0,n;
- struct Node
- {
- int word[40];
- struct Node *next; //ссылка на след. узел
- struct Node **ptr; //указатель (вместо ссылки "&Head")
- };
- typedef struct Node*PNode; //тип данных:указатель на узел
- PNode Head=NULL;
- struct Node **ptr = &Head; //инициирование указателя (вместо ссылки "&Head")
- PNode CreateNode(int NewWord[]) //СОЗДАНИЕ ЭЛ-ТА СПИСКА
- {PNode NewNode=(PNode)malloc(sizeof(struct Node)); //указатель на новый узел
- strcpy(NewNode->word,NewWord); //записать слово(замена NewWord на word)
- NewNode->next=NULL; //следующего узла нет
- return NewNode;} //рез-т функции-адрес узла
- void AddFirst(PNode ptr,PNode NewNode) //ДОБАВЛЕНИЕ УЗЛА В НАЧАЛО СПИСКА
- {NewNode->next=Head;
- Head=NewNode;}
- void AddAfter(PNode p,PNode NewNode) //ДОБАВЛЕНИЕ УЗЛА ПОСЛЕ ЗАДАННОГО
- {NewNode->next=p->next;
- p->next=NewNode;
- ch1++;} //счетчик(считает кол-во всех слов в списке 1)
- void AddLast(PNode ptr,PNode NewNode) //ДОБАВЛЕНИЕ УЗЛА В КОНЕЦ СПИСКА
- {PNode q=Head;
- if (Head==NULL) //если список пуст
- {AddFirst(Head,NewNode); //вставляем первый элемент
- return;}
- while (q->next) //ищем последний элемент
- q=q->next;
- AddAfter(q,NewNode);}
- int main()
- {
- PNode ptr = NULL, p;
- FILE *in,*out1;
- int word[40],word2[40];
- printf("Vvod:\n");
- scanf("%d",&word2[0]); //ввод слова на запрос №1(компилятор предупреждал: поэтому ввел [0])
- in=fopen("input.txt","r"); //открытие файла 1
- while (1) //в n хранится значение, к-е вернула ф-я fscanf.Если это число меньше 1(чтение прошло неудачно или закончились данные в файле),то происходит выход из цикла.
- {
- n=fscanf(in,"%d",word); //чтение данных из файла 1
- if (n<=0)
- break;
- p=CreateNode(word); //создание нового узла
- AddLast(Head,p); //добавление
- }
- fclose(in); //закрытие файла1
- out1=fopen("output1.txt","w"); //открытие файла2
- //ВЫВОД ДАННЫХ В ФАЙЛ №2(ПО ЗАПРОСУ №1)
- p=Head; //присвоение узлу р "головы"
- p=p->next->next;
- fprintf(out1,"%d",p->word);
- fclose(out1); //закрытие файла2
- return 0; //(компилятор предупреждал: поэтому ввел)
- }
Решение задачи: «Линейный список и ошибка Warning: passing arg 1 of `strcpy' from incompatible pointer type»
textual
Листинг программы
- PNode CreateNode(int NewWord[]) //СОЗДАНИЕ ЭЛ-ТА СПИСКА
- {PNode NewNode=(PNode)malloc(sizeof(struct Node)); //указатель на новый узел
- strcpy(NewNode->word,NewWord); //записать слово(замена NewWord на word)
Объяснение кода листинга программы
PNode CreateNode(int NewWord[])
- это функция для создания нового узла в линейном списке.NewNode=(PNode)malloc(sizeof(struct Node))
- выделение памяти под новый узел с помощью функцииmalloc
. Значениеsizeof(struct Node)
используется для определения размера памяти, который нужно выделить.strcpy(NewNode->word,NewWord)
- копирование слова из массиваNewWord
в полеword
нового узла. Здесь возникает ошибкаWarning: passing arg 1 of
strcpy' from incompatible pointer type. Это предупреждение указывает на то, что функция
strcpyожидает первый аргумент типа
char, а в данном случае передается указатель на
int. Это происходит потому, что в C массивы целочисленных типов автоматически преобразуются в указатели на их первый элемент. Чтобы исправить эту ошибку, необходимо привести массив
NewWordк типу
charперед копированием. Например, можно использовать следующий код:
char wordPtr = (char )NewWord; strcpy(NewNode->word, wordPtr);`
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д