0

この1203のような値を格納したい配列があります

   char* arr= new char[10];
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 0;
    arr[3] = 3;

しかし、0を保存した後、それ以上のデータbcsを見ることができなくなり、それがデータの終わりと見なされます。これを管理する方法はありますか?

4

8 に答える 8

2

整数を文字配列に格納しています。次のようなものを試してください。

char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';
于 2012-08-06T09:15:20.967 に答える
2

あなたの構文はC++でした。snprintfしかし、それを無視して、データを保存するために使用できます:

snprintf(arr, 10, "%d", 1203);
于 2012-08-06T09:18:51.030 に答える
1

あなたは「これ以上データを見ることができない」と言っていますが、データを見るために何をしているのかについては説明していません。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 の配列を、文字列。

于 2012-08-06T09:40:06.237 に答える
1

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)にキャストするので良くありませんintchar*char*は変数tempであり、 に格納される数値ではありませんtemp

ポインターがあなたにとって新しいものである場合は、ポインターでいくつかの演習を行うと役立ちます。配列、リストなどを操作します...

于 2012-08-06T10:52:47.573 に答える
0

char* arr= 新しい char[10];

文字の配列を定義したので、任意の配列メンバーに 0 を割り当てて配列全体を渡すか、配列を印刷すると、0 は実際には NULL であり、すべての文字列が NULL で終了するため、それをデータの終わりと見なす理由は NULL です。したがって、本当に文字 0 の値を割り当てたい場合は、ASCII 値 0 または '0' を割り当てることができます。

それが役に立てば幸い

于 2012-08-06T10:06:00.793 に答える
0

次のように書くべきだと思います。

char* arr= new char[10];
arr[0] = '1';
arr[1] = '2';
arr[2] = '0';
arr[3] = '3';

アーミールが言ったように、終了を示すゼロ値を使用する必要がないように

于 2012-08-06T09:17:08.070 に答える
0

ほとんどの場合、デバッガー ツールは、char 配列を表示していることに気付くでしょう。データのその from は、ヌル終了文字列のストレージとして C で一般的に使用されます。

名前が十分に明らかにされていない場合、null で終わる文字列は、一連の文字 (印刷可能かどうかに関係なく) であり、ゼロで終了します。そのマークは、printf などに、いつ印刷を停止するかを伝えます。

また、デバッガーが使用する関数に印刷を停止するように指示しました。これを回避するには、デバッガーに「これは文字列ではありません、ばかだ!」と伝える必要があります。または、単純に short として再宣言します。

あなたはスターターになるつもりなので、次のアドバイスに従ってください: int は忘れて、short または long を使用してください。int サイズはマシンに依存し、後で「Xbits だと思った」というトラブルに巻き込まれます。

于 2012-08-06T09:22:32.310 に答える
0

UNIX プラットフォームで write を使用できます。

man 2 write;

この関数を使用すると、印刷する要素の長さを指定できます。

しかし、確かにsnprintf、ポータブルなソリューションです (size_tサイズが許すので)。

セグメンテーション違反にならないように注意してください。

注意: または のような値で char を設定できます。0または255、負の値の場合はsigned char... で設定できます048違いはありません。

于 2012-08-06T09:34:51.097 に答える