Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
3 / 3 / 1
Регистрация: 14.04.2011
Сообщений: 141
1

Линейный список и ошибка Warning: passing arg 1 of `strcpy' from incompatible pointer type

29.08.2011, 16:22. Показов 4640. Ответов 1
Метки нет (Все метки)

Проблема с написанием проги (линейный список). Язык Си.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#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;                                                                                //(компилятор предупреждал: поэтому ввел)
}
Во-первых выдает предупреждение:
\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- то есть выдает ошибку.
Помогите, пожалуйста, разобраться.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2011, 16:22
Ответы с готовыми решениями:

[Warning] passing arg 1 of `fopen' makes pointer from integer without a cast
Здравствуйте, уважаемые форумчане! :) Работаю над лабораторной работой. Моя задача создать что...

Initialization from incompatible pointer type
Выдается странное предупреждение во время компиляции кода: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

Assignment from incompatible pointer type
assignment from incompatible pointer type #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt;...

Assignment from incompatible pointer type
В переменной &quot;a&quot; хочу хранить ссылки на адреса памяти значений val. Но выдает ошибки. #include...

1
Заблокирован
29.08.2011, 19:48 2
Сразу же бросается в глаза следующий код

C++
1
2
3
PNode CreateNode(int NewWord[])                                            //СОЗДАНИЕ ЭЛ-ТА СПИСКА
{PNode NewNode=(PNode)malloc(sizeof(struct Node));         //указатель на новый узел
strcpy(NewNode->word,NewWord);                      //записать слово(замена NewWord на word)
Посмотрите объявление функции strcpy. Она не принимает указатель на int, коим у вас является второй аргумент NewWord

Кроме того значение указателя NewNode->word у вас не определено. Так что может выйти ошибка выполнения.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2011, 19:48

ошибка Error: Incompatible type for arg no. 1: Got "TRawbyteSearchRec", expected "LongWord"
Здравствуйте дорогие форумчанины. В данном коде выходит ошибка unit1.pas(101,24) Error:...

Ошибка при компиляции: cannot use uintptr(unsafe.Pointer(sslPara) (type uintptr) as type syscall.Pointer in field value
Добрый день. Помогите, пожалуйста, разобраться с проблемой. При попытке скомпилировать проект...

выдаёт ошибку: Error: Incompatible type for arg no. 3: Got "Extended", expected "AnsiString"
a:=a/i; не получается переделать под делфи. нужно,чтобы изменённый массив вывел в stringgrid2. ...

Error: Incompatible type for arg no. 1: Got "Extended", expected "QWord"
Задача: Написать калькулятор var Form1: TForm1; x1,x2,op:integer; implementation {$R...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru