質問するログイン新規登録

回答編集履歴

3

ちょっとしたコード改良。特にGStringのメモリ解放にg_ptr_array_foreachを使ってみた。

2026/06/16 15:29

投稿

cametan
cametan

スコア338

answer CHANGED
@@ -20,11 +20,11 @@
20
20
  {
21
21
  for (gsize j = 0; j < N; j++)
22
22
  {
23
- g_print("%s%s", ((GString *)g_ptr_array_index(tbl, i == j))->str, j == N - 1 ? "\n" : "");
23
+ g_print("%s", ((GString *)g_ptr_array_index(tbl, i == j))->str);
24
24
  }
25
+ g_print("\n");
25
26
  }
26
- g_string_free(one, TRUE);
27
+ g_ptr_array_foreach(tbl, (GFunc)g_string_free, GINT_TO_POINTER(TRUE));
27
- g_string_free(two, TRUE);
28
28
  g_ptr_array_free(tbl, TRUE);
29
29
  return EXIT_SUCCESS;
30
30
  }

2

空白要らんかった。

2026/06/16 14:00

投稿

cametan
cametan

スコア338

answer CHANGED
@@ -20,7 +20,7 @@
20
20
  {
21
21
  for (gsize j = 0; j < N; j++)
22
22
  {
23
- g_print("%s%s", ((GString *)g_ptr_array_index(tbl, i == j))->str, j == N - 1 ? "\n" : " ");
23
+ g_print("%s%s", ((GString *)g_ptr_array_index(tbl, i == j))->str, j == N - 1 ? "\n" : "");
24
24
  }
25
25
  }
26
26
  g_string_free(one, TRUE);

1

文字/文字列の仕様の話を追加

2026/06/16 11:54

投稿

cametan
cametan

スコア338

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  まぁ、全角文字列を使う、となると、素のCで頑張るよか[GLib](https://docs.gtk.org/glib/index.html)みたいなクロスプラットフォームの外部ライブラリとかに頼った方がいい、って話になるんで、面倒を避けてる、って話だよね。
2
- そもそも仕様上、「どの文字コードを使います」とか書かれてないし、結果、「全角文字」と格闘するのはあまり嬉しくない、ってのがあるよね。
2
+ そもそも[C言語の仕様](https://kikakurui.com/x3/X3010-2003-01.html)上、「どの文字コードを使います」とか書かれてないし(と言うことは実はASCII文字列の使用さえ仕様外の話だ)、結果、「全角文字」と格闘するのはあまり嬉しくない、ってのがあるよね。
3
3
 
4
4
  ```C
5
5
  #include <glib-2.0/glib.h>