Cde String Atama Sorunu

NoWeDoR
Cool Çırak
Arkadaşlar aşağıdaki programı çalıştırdıktan sonra ana menüden 1 girerek bir adet kayıt alıyorum kullanıcıdan. Atıyorum ad q soyad q numara 123123 olarak girilsin.

Daha sonra delete fonksiyonunu kullanarak (ana menüden 5 girerek) bu girdiğim kaydı silmek için oraya tekrar atama yapmak istiyorum. (Ad, soyad ve numara 0 degerine ya da NULL değerine eşit olsun diye uğraşıyorum) Ancak ne denediysem atamayı delete fonksiyonu içersinde bir türlü yapamadım. Kod satırlarında ((( deletE() fonksiyonunda ))) yaptığım atamalara (// olarak yorum satırlarında) bakabilirsiniz.

Acaba nasıl atama yapılmalı ?

Kod:
#include <stdlib.h>      // "stdlib" library contains of exit() function
#include <malloc.h>     // "malloc" library contains of malloc() function
#include <Windows.h>   // "Windows" library contains of Sleep() function which waits the system as you want
#include <io.h>       // "io" library contains of filelength() function
#include <string.h>  // "string" library contains of strlen() function
#include <stdio.h>  // "stdio" library contains of other functions which hasn't been mentioned

typedef struct personKnowledge   // Structe and it's elements are being defined
{
	char name[32];
	char surname[32];
	char number[32];
};

FILE *ptrFILE, *ptrFILE1;   // Variables are being defined
long int recordLength, totalRecordLength, location;
int choice, number, totalRecordNumber, i;
static int counter = 0;

int menu();   // Functions are being defined
void newRecord();
void display();
void update();
void add();
void deletE();

int main()   // Program is being initialiezed 
{
	menu();
	return 0;
}

int menu()   // Options are being presented to user 
{
	do
	{
		printf("\n\t\t --- Phone Book Program ---");
		printf("\n\n\t\t 1) Open file and record someone");
		printf("\n\n\t\t 2) Display person knowledge");
		printf("\n\n\t\t 3) Update person knowledge");
		printf("\n\n\t\t 4) Add person to list");
		printf("\n\n\t\t 5) Delete someone");
		printf("\n\n\t\t 6) Exit");
		printf("\n\n\nEnter your choice: ");
		choice = 0;
		scanf("%d", &choice);
		fflush(stdin);
		switch (choice)
		{
		case 1:
		{
			newRecord();
			break;
		}
		case 2:
		{
			display();
			break;
		}
		case 3:
		{
			break;
		}
		case 4:
		{
			break;
		}
		case 5:
		{
			deletE();
			break;
		}
		case 6:
		{
			printf("\nWorking has been completed.\n");
			return 0;
		}
		default:
		{
			printf("\nWrong entry! The program has been terminated.\n");
			break;
		}
		}
	} while (choice >= 1 && choice <= 6);
}

void newRecord()   // This function opens a file and records one person in file
{
	if (counter > 0)
	{
		system("cls");   // Screen is being cleaned
		Sleep(350);     // Sleep functions waits user for a while
		printf("\nYou have already entered '1' and opened a file. To add a person please enter '4'\n");
		return;
	}
	else
	{
		if ((ptrFILE = fopen("Phone Book.dat", "wb")) == NULL)   // wb is binary writing mode
		{
			printf("The file couldn't be opened\n");
			exit(EXIT_SUCCESS);
		}
		system("cls");
		Sleep(350);
		personKnowledge *p;   // p = (Person)
		p = (personKnowledge *)malloc(sizeof(personKnowledge));   // Memory is being allocated
		fflush(stdin);   // Cache memory is being cleaned
		recordLength = sizeof(*p);
		printf("\n\Express person name: ");   // User is entering the person's knowledge and they are being saved in file
		fgets(p->name, sizeof(p->name), stdin);
		size_t wordLength = strlen(p->name);  // "size_t is unsigned integer type"
		if (wordLength > 0 && p->name[wordLength - 1] == '\n')   // This if idiom has been used for sentence seperation
		{
			p->name[--wordLength] = '\0';
		}
		printf("Express %s's surname: ", p->name);
		fgets(p->surname, sizeof(p->surname), stdin);
		printf("Express %s's number: ", p->name);
		fgets(p->number, sizeof(p->number), stdin);
		fwrite(&(*p), recordLength, 1, ptrFILE);   // Knowledge which has been got from user is being saved in file processionally
		printf("\nPlease wait, information is saving to file..\n");
		Sleep(750);
		printf("*-* Saving operation has been completed succesfully. *-*\n");
		free(p);   // Allocated part of memory is being released
	}
	fclose(ptrFILE);   // File is being closed
	counter++;
}

void display()   // If there is person knowledge which is searched in file, this function reads it and prints on the screen
{
	if ((ptrFILE = fopen("Phone Book.dat", "rb")) == NULL)   // rb is binary reading mode
	{
		printf("The file couldn't be opened\n");
		exit(EXIT_SUCCESS);
	}
	system("cls");
	Sleep(350);
	personKnowledge *s;   // s = (Searching)
	s = (personKnowledge *)malloc(sizeof(personKnowledge));
	recordLength = sizeof(*s);   // Necessary location calculations are being done and person's knowledge is being displayed
	totalRecordLength = filelength(fileno(ptrFILE));   // The equalities explains what the purpose is from 137th line to 145th line 
	totalRecordNumber = totalRecordLength / recordLength;
	printf("\n\nExpress person record number which you search: ");
	number = -791673918435;
	scanf("%d", &number);
	fflush(stdin);
	printf("\n*-* Person knowledge which you search *-*\n");
	Sleep(750);
	location = (number - 1)*(recordLength);
	fseek(ptrFILE, location, SEEK_SET);   // The cursor locates place which is searched with fseek() function
	if (fread(&(*s), recordLength, 1, ptrFILE) != 0 && number > 0)  // If there is knowledge in that location and numbeer is greater than 0
	{
		printf("Name: %s\n", s->name);
		printf("Surname: %s", s->surname);
		printf("Number: %s", s->number);
	}
	else
	{
		printf("There is no record like this.\n");
		return;
	}
	free(s);
	fclose(ptrFILE);
}


void deletE()
{
	if ((ptrFILE = fopen("Phone Book.dat", "rb+")) == NULL)
	{
		printf("The file couldn't be opened\n");
		exit(EXIT_SUCCESS);
	}
	system("cls");
	Sleep(350);
	personKnowledge *del;   // del = (Deleting)
	del = (personKnowledge *)malloc(sizeof(personKnowledge));
	fflush(stdin);
	recordLength = sizeof(*del);
	totalRecordLength = filelength(fileno(ptrFILE));
	totalRecordNumber = totalRecordLength / recordLength;
	printf("\nExpress person number which you want to delete: ");
	scanf("%d", &number);
	fflush(stdin);
	fseek(ptrFILE, (number-1)*recordLength, SEEK_SET);
	if (fread(&(*del), recordLength, 1, ptrFILE) != 0 && number > 0)  // If there is knowledge in that location and number is greater than 0
	{
		Sleep(350);
		printf("*-* The record which is cleaned *-* \n", number);
		printf("Name: %s\n", del->name);
		printf("Surname: %s", del->surname);
		printf("Number: %s", del->number);
		// del->name = "";         <<<<<<<<<<<<<<<<<< :(      ??   ??   ???   ?
		// del->name = {};          <<<<<<<<<<<<<<<<<< :(             ?  ?  ??   ?? ? 
		// &(*del).name = "";         <<<<<<<<<<<<<<<<<< :(               ?   ? ?   ?? ?  ? ??
		// &(*del).name = {};           <<<<<<<<<<<<<<<<<< :(     ??  ??  ?     ??  
		// strcpy(del->name, "");      <<<<<<<<<<<<<<<<<< :(                 ???   ?              ?? ?? ? 
		// del->name = NULL;           <<<<<<<<<<<<<<<<<< :(                   ???   ?    ?? ?  ? ?
		// strcpy(del->name, NULL);     <<<<<<<<<<<<<<<<<< :(     ??  ??  ?     ?? 
	}
	else
	{
		Sleep(350);
		printf("There is no record like this.\n");
		return;
	}
	fclose(ptrFILE);
	free(del);
}
 
Üst