#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ZERO (0)
#define ONE (1)
#define TEN (10)
#define TWENTY (20)
#define FOURTY_SEVEN (47)
#define FIFTY_SEVEN (57)
typedef struct PHONE
{
char szName[20] ;
char szPhone[20] ;
struct PHONE *pNext ;
};
struct PHONE *pFirst = NULL ; // To denote start of the linked list
struct PHONE *pPointer = NULL ; // To denote current end node in linked list
struct PHONE *pNew = NULL ; // To denote the new node
struct PHONE *pTemp = NULL ; // To store pointer temporarily
struct PHONE *pTempForDeallocation = NULL ; // To store pointer for deallocation
struct PHONE stPhone ;
FILE *fPointerForOpen ; // To Open the file
int FilePresentOrNot() ; // To Check the file is present or not
int MemoryAllocation() ; // To Allocate Memory to the Linked List
int main()
{
int iChoice = 0 ;
int iRepeat = 0 ;
int iLength = 0 ;
do
{
fPointerForOpen = fopen("phonebook.txt","r");
fflush(stdin);
system("cls");
if(NULL == fPointerForOpen)
{
FilePresentOrNot();
}
// stPhone.szName = (char *)malloc(100);
while(fscanf(fPointerForOpen,"%s",stPhone.szName)!= EOF)
{
fscanf(fPointerForOpen,"%s",stPhone.szPhone);
pNew = (struct PHONE *) malloc(sizeof(struct PHONE)) ;
strcpy(pNew -> szName , stPhone.szName) ;
strcpy(pNew -> szPhone , stPhone.szPhone) ;
pNew ->pNext = NULL ;
MemoryAllocation() ;
}
printf("\n\nDo you Want to continue then press 1 ? \t");
scanf("%d",&iRepeat);
fclose(fPointerForOpen);
pFirst = NULL ;
}while(ONE == iRepeat);
return 0 ;
}
int MemoryAllocation()
{
if(NULL == pFirst)
{
pFirst = pNew ;
pPointer = pNew ;
}
else
{
pPointer->pNext = pNew ;
pPointer = pNew ;
}
}
ここにコードがあります。ここでは配列を使用して名前と電話番号を読み込み、その配列をポインタに置き換えます。私が交換した時、私は4文字だけを読むことができます。文字配列を使用せずにファイルから文字列を読み取る方法は?
誰も私にそれをするのに役立ちますし、それが正しいかどうか教えてください?
Em ...ヌル文字で終わる配列である文字列を保存する場合は、何らかの形で配列が必要です。 –
ポインタが何かを指しています。それらを 'char *'にすることはできますが、そのバッファにデータを格納したい場合は、配列を何らかの方法で割り当てる必要があります。この場合、リソースの意味は実際には分かりません。固定サイズの構造では、読み書きが可能なので、すべての作業がずっと簡単になります。 – Havenard