Cでストリングのスタックを作成しようとしていますが、問題が発生しているようです。目標は、ファイルを読み取り、それを逆に印刷することです。私はスタックがこれを行う最も適切な方法であると決めました(私はこれを行う簡単な方法があることを認識していますが、構造の使用について自分自身に挑戦したい)。ここで Cストリングの問題
は私のプッシュ/ printStackコードです:void push(struct LineStack * stack, char * line)
{
if(!stack->head)
{
stack->head = malloc(sizeof(struct entry *));
stack->head->data = line;
stack->head->next = NULL;
stack->top = stack->head->data;
stack->size++;
}
else
{
struct entry * entry = malloc(sizeof(struct entry *));
entry->data = line;
entry->next = stack->head;
stack->head = entry;
stack->top = stack->head->data;
stack->size++;
}
}
void printStack(struct LineStack * stack)
{
while(stack->head)
{
printf("%s\n", stack->head->data);
stack->head = stack->head->next;
}
}
そしてここtempFile.txt /メインです:
int main(void)
{
struct LineStack * stack = newStack();
char * fileName = "tempFile.txt"
char line[SIZE];
FILE * fp = fopen(fileName, "r");
while(fgets(line, 128, fp) != NULL)
push(stack, line);
printStack(stack);
free(stack);
return 0;
}
tempFile.txt:
Lets begin
We'll say 2 + 2 = 4
But then go ahead and prove that 1 + 2 + 3 + 4 + ... = -1/12
How can this be?
How can this be?
私がしようコードを実行すると、ファイル(5)の正しい行数が出力されますが、「どうすればよいのか」が表示されます。さて、私はGDBを使って問題が何かを確認しようとしました。プッシュ呼び出しが適切に機能しているようです。それぞれの呼び出しは異なるメモリ位置に異なる行を置くので、スタックを構成するリンクリストが正常に動作していると仮定する必要があります。私は何か愚かで小さなものを逃していますか?事前に
struct entry
{
char * data;
struct entry * next;
};
struct LineStack
{
struct entry * head;
char * top;
int size;
};
ありがとう:
は参考のため、ここではエントリー/ LineStackの宣言です。
どこが 'newStack()'ですか? –
newStack()とSIZEは定義されていません。 – BlueCollar
'push()'関数で大文字と小文字の重複を除いて、大部分は避けるべきです。 –