Member 13689608 Ответов: 2

Ошибка в программе C - ожидаемый "char *", но аргумент имеет тип char


Итак, я пишу эту программу, и я новичок, поэтому, пожалуйста, извините мой спагетти-код, я сталкиваюсь с ошибкой, когда пытаюсь выполнить этот код, и я просто не могу понять, почему.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct listNode
{
	char data; 
	struct listNode *nextPtr; 
};

typedef struct listNode ListNode; 
typedef ListNode *ListNodePtr;


/*prototypes*/
char insert( ListNodePtr *head, char value);
void printList( ListNodePtr currentPtr );
int isEmpty( ListNodePtr sPtr);


void main()
{

ListNodePtr startPtr = NULL;
char item;

     printf("Enter the character\n");
			insert(&startPtr,item);
			printList(startPtr);

}
 

char insert( ListNodePtr *head, char value)
{

ListNodePtr newptr;
ListNodePtr currentptr;
ListNodePtr previousptr;


newptr = malloc( sizeof( ListNode ));

if(newptr !=NULL)
{
		strcpy(newptr->data,&value);
		newptr->nextPtr= NULL;
		previousptr=NULL;
		currentptr = *head;


 if ( previousptr == NULL )
		{
			newptr->nextPtr = *head;
			*head = newptr;
		} /* end if*/
		
		else   /* insert new node between previousPtr and currentPtr*/
		{
			previousptr->nextPtr = newptr;
			newptr->nextPtr = currentptr;
		} /* end else*/
	 /* end if*/
}
	else
	{
		printf( "%s not inserted. No memory available.\n", value );
	}
	


}



void printList( ListNodePtr currentPtr )
{

	if ( isEmpty( currentPtr ))
	{
		puts( "List is empty.\n" );
	} 
	else
	{
		puts( "The list is: " );
		
		while ( currentPtr != NULL )
		{
			printf( "%s --> ", currentPtr->data );
			currentPtr = currentPtr ->nextPtr;
		} 
		puts( "NULL\n" );
	} 
}

int isEmpty( ListNodePtr sPtr )
{
	return sPtr == NULL;
}



Им получать сообщение об ошибке;



[^]

Пожалуйста, помогите мне, ребята".

Что я уже пробовал:

Ошибка, по-видимому, происходит из этой части кода;
strcpy(newptr->data,&value);
newptr->nextPtr= NULL;
previousptr=NULL;
currentptr = *head;


И, как я уже сказал, я абсолютный новичок, и я не пробовал ничего другого, кроме google this, но все еще не могу найти решение. Заранее спасибо за вашу помощь!

2 Ответов

Рейтинг:
0

OriginalGriff

Посмотрите на код:

struct listNode
{
	char data; 
	struct listNode *nextPtr; 
};
...
strcpy(newptr->data,&value);
data определяется как один символ: от 'A' до 'Z', от '0' до '9', '.', ',', и так далее - но вы пытаетесь передать это другим. strcpy который копирует строку символов (т. е. массив значений char, заканчивающихся нулевым символом) из одного места в другое.

На первый взгляд, data должно быть а char* (то есть указатель на a char) или А char[] (т. е. массив символов) вместо одного char, но это означало бы, что вам также нужно проверить и исправить остальную часть вашего кода.

Я бы посоветовал вам сесть за задание, которое дал вам ваш наставник, и хорошенько подумать в течение нескольких минут, прежде чем вы начнете делать какие - либо изменения, а затем перепроектировать свой узел вокруг того, что вам нужно хранить. Я бы также предложил вам сначала закодировать незначительный бит - возможно, бит "создать один узел" - и проверить его, чтобы убедиться, что он работает, прежде чем вы начнете добавлять больше кода. Таким образом, каждый шаг решения строится на коде, который, как вы знаете, работает, что делает отладку проблем намного проще!


Рейтинг:
0

KarstenK

Чтобы использовать структуру для строки, вам нужно предоставить этот буфер и иметь два варианта: простой фиксированный размер или более динамический подход к размеру. Но убедитесь, что вы не копируете больше символов, чем имеет буфер

struct listNode
{
	char data[20]; 
	struct listNode *nextPtr; 
};
...
strncpy(newptr->data,&value, sizeof(newptr->data));//copy max count
С динамическим размером:
struct listNode
{
	char *data; 
	struct listNode *nextPtr; 
};
...
newptr->data = strdup(,&value);//alloc data
Но вы всегда должны где-то освободить данные. Так что она более покладиста.