(0)
(1) getTc()をmallocを使って書き直してみると・・・
- 以下のgetTc()では、変数tcBuf[]や変数tcbがいまいちピンとこないかもしれないと、今になって思いました。
- だからもっと普通の書き方をしたらどうなるかを紹介したいと思います。
int getTc(String s, int len) // トークン番号を得るための関数.
{
int i;
for (i = 0; i < tcs; i++) { // 登録済みの中から探す.
if (len == tl[i] && strncmp(s, ts[i], len) == 0)
break;
}
if (i == tcs) {
if (tcs >= MAX_TC) {
printf("too many tokens\n");
exit(1);
}
strncpy(&tcBuf[tcb], s, len); // 見つからなかったので新規登録.
tcBuf[tcb + len] = 0; // 終端文字コード.
ts[i] = &tcBuf[tcb];
tl[i] = len;
tcb += len + 1;
tcs++;
}
return i;
}
int getTc(String s, int len) // トークン番号を得るための関数.
{
int i;
for (i = 0; i < tcs; i++) { // 登録済みの中から探す.
if (len == tl[i] && strncmp(s, ts[i], len) == 0)
break;
}
if (i == tcs) {
if (tcs >= MAX_TC) {
printf("too many tokens\n");
exit(1);
}
ts[j] = malloc(len + 1);
strncpy(ts[j], s, len); // 見つからなかったので新規登録.
ts[j][len] = 0; // 終端文字コード.
tl[i] = len;
tcs++;
}
return i;
}
- これで分かるように書き換え前のgetTc()におけるtcBuf[]とtcbの役割は、malloc()の代わりです。
こめんと欄