私は入力ファイルからトークンを作成しようとしています。ですから、私はfgetsを使って1行を取得し、それをchar *を取り込んでトークンのchar *を返すヘルパーメソッドに送ります。私はトークンがすべて ""で区切られているので、デリミタをstrtok()として利用しています。しかし、なぜコードが1行につき2トークンしか作成しないのか分かりませんし、トークン化が必要な行が増えたとしても、次の行に移動するだけです。ここでは、コードは次のようになります。ここではstrtok()から1行につき2トークンだけを取得する
char *TKGetNextToken(char * start) {
/* fill in your code here */
printf("Entered TKGetNextToken \n");
printf(&start[0]);
char* temp = &start[0];
//Delimiters for the tokens
const char* delim = " ";
//store tempToken
char* tempTok = strtok(temp, delim);
//return the token
return tempTok;
}
は、私はmainメソッド内のトークンを格納しています方法です:
//call get next token and get the token and store into temptok
while (temp!= NULL) {
tempTok = TKGetNextToken(temp);
printf("tempTok: %s\n",tempTok);
token.charPtr[tempNum] = tempTok;
tempNum++;
printf("Temp: %s\n",tempTok);
temp = strtok(NULL, " \0\n");
}
だから、私はfile.txtをを持って言うことができます:
abcd ef ghij asf32
fsadf ads adf
作成されたトークンは "abcd"と "ef"になり、 "ghij"と "asf32"のトークンを作成せずに次の行に進みます。
注:Cは_methods_をサポートしていない、だけ_functions_。 – Olaf
そして、 'printf(&start [0]);'は明らかにno-goです! **決して**フォーマットされた文字列としてusafeデータを渡すことはありません!これがマルウェアの最も一般的なエントリーポイントの1つです(避けるのが最も簡単です)。 – Olaf
関数と呼び出し元の両方で同じ文字列で 'strtok'を呼び出しています。そうですね。実際には、同じ文字列にNULLと非NULLの 'strtok'呼び出しが混在しています。どちらがさらに悪いですか?それはほとんどあなたが望むものではありません。何が起こっているかを詳しく知るには、デバッガを使うことをお勧めします。 – kaylum