0

私は、gtk+ 2.0 と gtksourceview 2.0 を使用してテキスト エディターを作成するデバッグ段階にいます。特定のファイル (以前は geany で編集されていて、通常は python ファイル) を開くと、エディターがクラッシュし、次の出力が表示されます。

(ledit:23515): Gtk-CRITICAL **: IA__gtk_text_buffer_set_text: assertion `GTK_IS_TEXT_BUFFER (buffer)' failed
**
GLib:ERROR:gutf8.c:1915:_g_utf8_make_valid: assertion failed: (g_utf8_validate (string->str, -1, NULL))
Aborted

このエラーを次のようにトラップしようとしました。

char *path,*string;
GtkTextBuffer *tbuffer;
gsize length = -1;


path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
g_file_get_contents(path,&string,&length,NULL); 
if (g_utf8_validate(string,length,NULL))
{
  ...
  gtk_text_buffer_set_text(tbuffer,string,-1);
  ...
}
else
{
  printf("invalid utf-8 data\n");
} 

しかし、これはうまくいきません。2 つの質問があります。

  1. これがエラーをトラップできなかったのはなぜですか?
  2. その場で文字列を有効なutf-8にするために他に何ができますか?
4

1 に答える 1

0

間違った関数でエラーをトラップしようとしていたことがわかりました。エラーをスローしていた関数はg_file_get_contents. 以下に示すようにコードブロックを変更しましたが、問題のファイルが正常に開くようになりました。エラーをスローしていたのと同じ機能をまだ実行しているため、ちょっと困惑していますが、今は if の状態ですステートメント、それは正常に動作しますか???

char *path,*string;
GtkTextBuffer *tbuffer;
gsize length = -1;


path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));

if ( g_file_get_contents(path,&string,&length,NULL) )
{
  ...
  gtk_text_buffer_set_text(tbuffer,string,-1);
  ...
}
else
{
  printf("file did not open\n");
} 
于 2012-05-31T19:34:56.947 に答える