テキストエディタ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dequeue

テキストエディタ

#1

投稿記事 by dequeue » 13年前

循環・重連結リストを用いてテキストエディタを作れという課題が出ました。
それの作成中エラーがでたのですが原因がよくわからず困っています。自分で調べてみたところinseartlineのnode *pnode = (node *)malloc(sizeof(node))だと思うのですが...
エラーの原因と修正の仕方を教えてもらえれば光栄です。できるなら今日明日にでもお願いします

コード:

#include<stdio.h>
#include<stdlib.h>

char buf[200];

typedef struct Node{
	char *str;
	struct Node *left,*right;
} node;
node *start,*current,*p;
node *insertline(node *pcur,char *buf){
	node *pnode = (node  *)malloc(sizeof(node));
	if( pnode == NULL)
		puts("Not enough memory"),exit(EXIT_FAILURE);
	
	pnode->str =(char *)malloc(sizeof(buf)+1);
	if(pnode->str == NULL)
		return NULL;
	strcpy(pnode->str,buf);
	pnode->left = pcur;
	pnode->right = pcur->right;
	pcur->right->left=pnode;
	pcur->right = pnode;
	return pnode;
}
int main(){
	start=(node *)malloc(sizeof(node));
	start->left = start->right = current = start;
	for(;;){
		if(fgets(buf,200,stdin)==NULL)
			break;
		buf[strlen(buf)-1] = '\0';
	        p = insertline(current,buf);
		if(p==NULL){
			puts("Not enough memory");
			break;
		}else
			current = p;
	}

}

box
記事: 2002
登録日時: 13年前

Re: テキストエディタ

#2

投稿記事 by box » 13年前

>作成中エラーがでた

作成中とは、何のことですか?
コンパイル時のことですか?

エラーが出た、とは、どういうことですか?
どんなエラーが出たかの提示は、ナシですか?

「作成中エラーが出た」だけですとね、ほとんど何も言っていないのに等しいんです。
状況を具体的に書いてください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
bitter_fox
記事: 607
登録日時: 13年前
住所: 大阪府

Re: テキストエディタ

#3

投稿記事 by bitter_fox » 13年前

dequeue さんが書きました: それの作成中エラーがでたのですが原因がよくわからず困っています。自分で調べてみたところinseartlineのnode *pnode = (node *)malloc(sizeof(node))だと思うのですが...
エラーの原因と修正の仕方を教えてもらえれば光栄です。できるなら今日明日にでもお願いします
具体的にどういったエラーなのでしょうか?
今の説明ではあいまい過ぎます。
dequeue さんが書きました:

コード:

node *insertline(node *pcur,char *buf){
	pnode->str =(char *)malloc(sizeof(buf)+1);
	if(pnode->str == NULL)
		return NULL;
	strcpy(pnode->str,buf);
}
あと、sizeof(buf)+1は、文字列長を求めてるのかもしれませんが、sizeof(buf)と言うのはポインタbufの大きさになるので常に一定です。
文字列長を求めるにはstrlen関数を使います。

dequeue

Re: テキストエディタ

#4

投稿記事 by dequeue » 13年前

申し訳ありません。
エラーが出たのは実行時で状況は次の時です

12345678912
123
と入力するとプログラムを強制終了されます。

box
記事: 2002
登録日時: 13年前

Re: テキストエディタ

#5

投稿記事 by box » 13年前

そもそもの話として…

>循環・重連結リストを用いて

という要求仕様を、今のデータ構造は満たしていると思いますか?
もし、私が採点する立場だったら、構造体定義を見ただけで0点を付けます。
コードの他の部分がどんなにすばらしかったとしても。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

dequeue

Re: テキストエディタ

#6

投稿記事 by dequeue » 13年前

box さんが書きました:そもそもの話として…

>循環・重連結リストを用いて

という要求仕様を、今のデータ構造は満たしていると思いますか?
これはほぼ教科書の写しですので満たしていると思いますが?

返信いただいたお二人の方ありがとうございました。
当初の問題は解決できました。

box
記事: 2002
登録日時: 13年前

Re: テキストエディタ

#7

投稿記事 by box » 13年前

循環リストと二分木は、全く別のデータ構造です。
そこんところを間違えないように。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

閉鎖

“C言語何でも質問掲示板” へ戻る