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

回答編集履歴

1

コメントについて解答欄で返信

2021/09/05 15:32

投稿

nomuken
nomuken

スコア1627

answer CHANGED
@@ -10,4 +10,40 @@
10
10
  といった具合にエラーになるのではないかと考えられます。
11
11
 
12
12
  送信側で送信データ長を文字列長にするか
13
- 受信側で終端コード以降のデータを切り捨ててください。
13
+ 受信側で終端コード以降のデータを切り捨ててください。
14
+
15
+ ---
16
+ 2021-09-06追記
17
+
18
+ > 送信側で送信データ長を文字列長にするか
19
+
20
+ `send(network_socket, &x, sizeof(x), 0);`の第三引数`sizeof(x)`を`strlen(x)`に変更します。
21
+ xのサイズを変えるのはデータの桁数(文字数)が変わったときに対応できないのでこちらを推奨します。
22
+
23
+ > 受信側で終端コード以降のデータを切り捨ててください。
24
+
25
+ 現状は`data`の長さが256になっていると思われますが有効な文字列長になるように変数の内容を加工してあげればよいです。findを使って終端コードの位置を求め、そこまで切り詰めます。
26
+
27
+ 以下はpython3ですが2でも多分同じなはず。
28
+ ```
29
+ >>> a=b"100\x00\xa5"
30
+ >>> index=a.find(b"\x00")
31
+ >>> index
32
+ 3
33
+ >>> if index!=-1:
34
+ ... a=a[:index]
35
+ ...
36
+ >>> a
37
+ b'100'
38
+ >>> a.decode("utf-8")
39
+ '100'
40
+ ```
41
+
42
+ > 全く知識がなくこれを実現する見当がつきません。必要となる前提知識として何が必要になるのか良ければ教えていただけますでしょうか。
43
+
44
+ 難しい質問ですね。
45
+ 今回の場合は言語仕様、特に配列、文字列の取り扱いを知っていればできると思います。
46
+ ただ、言語仕様をあらかじめすべて把握することは難しいことです。
47
+ 問題にぶつかったときに解決して覚えていけばいいと思います。
48
+
49
+ あと、質問の際、初心者アイコンをつけておくと最初からコードで修正内容を案内してもらえる確率が高くなるかもしれません。