この1203のような値を格納したい配列があります
char* arr= new char[10];
arr[0] = 1;
arr[1] = 2;
arr[2] = 0;
arr[3] = 3;
しかし、0を保存した後、それ以上のデータbcsを見ることができなくなり、それがデータの終わりと見なされます。これを管理する方法はありますか?
この1203のような値を格納したい配列があります
char* arr= new char[10];
arr[0] = 1;
arr[1] = 2;
arr[2] = 0;
arr[3] = 3;
しかし、0を保存した後、それ以上のデータbcsを見ることができなくなり、それがデータの終わりと見なされます。これを管理する方法はありますか?
整数を文字配列に格納しています。次のようなものを試してください。
char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';
あなたの構文はC++でした。snprintf
しかし、それを無視して、データを保存するために使用できます:
snprintf(arr, 10, "%d", 1203);
あなたは「これ以上データを見ることができない」と言っていますが、データを見るために何をしているのかについては説明していません。printf と %s 形式で印刷していますか? デバッガで表示していますか?
char データに対して文字列操作を使用する場合、通常、ゼロは文字列の終わりを示します。これは、%s を printf と共に使用する場合、または strcpy または strlen を使用する場合に当てはまります。ただし、char の配列は数値として扱われる場合があります。のあとarr[3] = 3;
、arr[3]に3が格納されており、あとは見るだけです。
printf で %d 形式を使用すると、char データを 10 進数として出力できます。%d は 1 つの数値を出力するため、arr[0]、arr[3]、またはループ内の arr[i] など、出力する数値を 1 つ渡す必要があります。これは、ポインター (最初の要素へのポインターになる配列など) を printf に渡す %s とは異なり、複数の文字を出力します。
デバッガーで char 配列を見ている場合、arr[3] を個別に見て、3 が含まれていることを確認できます。デバッガーには、char の配列を、文字列。
0
の文字列の終わりを意味しchar*
ます。
char*
は C の文字列であり、配列としてではなく char 配列として使用するために存在するためですinteger
。文字列に関連するすべての関数は、文字列で使用することを意図しています。
int*
sを格納するために使用できますinteger
。
次のようにバイナリ操作を手動で実行できます。
int value = 1245;
char* temp = new char[4];
temp[0] = (char)(value >> 24);
temp[1] = (char)(value >> 16);
temp[2] = (char)(value >> 8);
temp[3] = (char)value;
return temp;
uint8_t
またはint
の代わりに使用できますchar
。
は(char*)((int)value)
にキャストするので良くありませんint
がchar*
、char*
は変数temp
であり、 に格納される数値ではありませんtemp
。
ポインターがあなたにとって新しいものである場合は、ポインターでいくつかの演習を行うと役立ちます。配列、リストなどを操作します...
char* arr= 新しい char[10];
文字の配列を定義したので、任意の配列メンバーに 0 を割り当てて配列全体を渡すか、配列を印刷すると、0 は実際には NULL であり、すべての文字列が NULL で終了するため、それをデータの終わりと見なす理由は NULL です。したがって、本当に文字 0 の値を割り当てたい場合は、ASCII 値 0 または '0' を割り当てることができます。
それが役に立てば幸い
次のように書くべきだと思います。
char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';
アーミールが言ったように、終了を示すゼロ値を使用する必要がないように
ほとんどの場合、デバッガー ツールは、char 配列を表示していることに気付くでしょう。データのその from は、ヌル終了文字列のストレージとして C で一般的に使用されます。
名前が十分に明らかにされていない場合、null で終わる文字列は、一連の文字 (印刷可能かどうかに関係なく) であり、ゼロで終了します。そのマークは、printf などに、いつ印刷を停止するかを伝えます。
また、デバッガーが使用する関数に印刷を停止するように指示しました。これを回避するには、デバッガーに「これは文字列ではありません、ばかだ!」と伝える必要があります。または、単純に short として再宣言します。
あなたはスターターになるつもりなので、次のアドバイスに従ってください: int は忘れて、short または long を使用してください。int サイズはマシンに依存し、後で「Xbits だと思った」というトラブルに巻き込まれます。
UNIX プラットフォームで write を使用できます。
man 2 write;
この関数を使用すると、印刷する要素の長さを指定できます。
しかし、確かにsnprintf
、ポータブルなソリューションです (size_t
サイズが許すので)。
セグメンテーション違反にならないように注意してください。
注意: または のような値で char を設定できます。0
または255
、負の値の場合はsigned char
... で設定できます0
。48
違いはありません。