0

こんにちは、テキストファイルを文字列に読み込むためのこのコードがあります

void addStu    (BST_TREE* list)
{
// Local Declarations
   COMPANY* stuPtr;
   FILE* fp;
   int i = 0;
   char fileName[25];
   char buffer [100];
   char* tempString;
// Statements

   stuPtr = (COMPANY*)malloc (sizeof (COMPANY));
   stuPtr->name = (char*) malloc(128 * sizeof(char));
   stuPtr->market = (char*) malloc(128 * sizeof(char));
   stuPtr->initial = (char*) malloc(128 * sizeof(char));
   tempString = (char*) malloc(128 * sizeof(char));

   printf("Enter the file name: ");
           gets(fileName);
           fp = fopen(fileName, "r");
           if(fp == NULL)
           {
              printf("Error cannot open the file!\n");
              exit(101);
           }
   while(fgets(buffer, 100, fp) != NULL)
        {
            if (!stuPtr)
                printf("MEmory overflow!\n"), exit(101);
            tempString = buffer;
            stuPtr->name = strtok(tempString, ";");
            sscanf(buffer, "%15s   %15s    %f ", stuPtr->market, stuPtr->initial, &(stuPtr->stock));
            BST_Insert(list, stuPtr);
            i++;
        } // end while

} //addStu

このコードは、変更していないのにバッファが変更され続けるため、正しく機能しません

これは私の入力です

Microsoft Corporation;   NASDAQ MSFT    259.94B  
Yahoo! Inc.;             NASDAQ YHOO    37.67B  
Baidu.com, Inc. (ADR);   NASDAQ BIDU    8.64B  
CNET Networks, Inc.;     NASDAQ CNET    1.13B  
QuickLogic Corporation;  NASDAQ QUIK    88.62M  
Answers Corporation;     NASDAQ ANSW    53.49M  
Apple Inc.;              NASDAQ AAPL    114.17B  

たとえば、最初の行を読み取ろうとしたとき、文字列トークンを使用して stuPtr->name を含むようにすることができましMicrosoft Coporationた。この時点の後、tempString も含むように変更されますMicrosoft Coporation。何らかの理由で、変更されるとは想定されていなかったバッファー、 も変更されstuPtr->market、 、stuPtr->initial、およびstuPtr->stock入力値が間違っています。

変更されずにバッファが変更されたのはなぜですか? このコードを修正して機能させるにはどうすればよいですか?

助けてくれてありがとう

4

1 に答える 1