ページ 11

テキストエディタ

Posted: 2011年2月02日(水) 22:24
by dequeue
循環・重連結リストを用いてテキストエディタを作れという課題が出ました。
それの作成中エラーがでたのですが原因がよくわからず困っています。自分で調べてみたところ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;
	}

}

Re: テキストエディタ

Posted: 2011年2月02日(水) 22:29
by box
>作成中エラーがでた

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

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

「作成中エラーが出た」だけですとね、ほとんど何も言っていないのに等しいんです。
状況を具体的に書いてください。

Re: テキストエディタ

Posted: 2011年2月02日(水) 22:36
by bitter_fox
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関数を使います。

Re: テキストエディタ

Posted: 2011年2月02日(水) 22:51
by dequeue
申し訳ありません。
エラーが出たのは実行時で状況は次の時です

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

Re: テキストエディタ

Posted: 2011年2月02日(水) 23:05
by box
そもそもの話として…

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

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

Re: テキストエディタ

Posted: 2011年2月02日(水) 23:08
by dequeue
box さんが書きました:そもそもの話として…

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

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

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

Re: テキストエディタ

Posted: 2011年2月02日(水) 23:12
by box
循環リストと二分木は、全く別のデータ構造です。
そこんところを間違えないように。