こんにちは、テキストファイルを文字列に読み込むためのこのコードがあります
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
入力値が間違っています。
変更されずにバッファが変更されたのはなぜですか? このコードを修正して機能させるにはどうすればよいですか?
助けてくれてありがとう