C の記憶を更新しようとしています。テキスト ファイル内の HTML タグをチェックして、それらがすべて互いに一致していることを確認する簡単なプログラムがあります。これにはスタックを使用します。問題のコードは次のとおりです。
char *tag, *endTag;
stackADT stack = newStack();
while (!feof(input))
{
tag = (char *)malloc(sizeof(char));
tag = getNextTag(input, &line);
printf("tag is %s\n", tag);
if (*(tag + 1) != '/') //if it is not a closing tag
{
push(stack, tag);
printf("%s was pushed\n", tag);
}
else
{
endTag = (char *)malloc(sizeof(char));
endTag = pop(stack);
printf("%s was popped\n", endTag);
check = doTagsMatch(endTag, tag);
if (check == 0)
{
printf("Error at line %d: %s and %s do not match.\n", line, endTag, tag);
exit(1);
}
}
free(tag);
}
html、body、および p タグを含む単純なファイルからの出力は次のようになります。
tag is <html>
<html> was pushed
tag is <body>
<body> was pushed
tag is <p>
<p> was pushed
tag is </p>
was popped
Error at line 1: and </p> do not match.
いくつかの int を使用して別の SSCCE を実行し、正常に機能したため、スタック自体が正しく機能することはわかっています。私が endTag を使用するプログラム内の唯一の場所なので、pop から何も得られない理由がわかりません。私が考えることができる唯一のことは、それがどういうわけかポインタの問題であるということです(問題がある場合、私のスタック要素はvoid *です)。