0
I2Cメッセージシステムの文字列に値を連結するC++コードを作成しています。私はメッセージが正しく働いているが、文字列を連結すると、コードは文字列に必要な3つの値以上の連結を間違ってしまいます。私が書いたコードは以下の通りです:2つのアドレス値は、2つのASCII文字がどこにあるか文字列連結中に余分な文字が追加されました
concatint(5, ' ', ' ');
:
void concatint(int value1, char address1, char address2)
{
int alive1 = static_cast<int>(address1);
int alive2 = static_cast<int>(address2);
char* alive3 = (char*)malloc(sizeof(address1));
char* alive4 = (char*)malloc(sizeof(address2));
//alive3 = address1;
//alive4 = address2;
sprintf(alive3, "%2d", address1);
sprintf(alive4, "%2d", address2);
if (value1 < 10)
readlength = 1;
if (value1 >= 10 && value1 < 100)
readlength = 2;
if (value1 >= 100 && value1 < 1000)
readlength = 3;
if (value1 >= 1000 && value1 < 10000)
readlength = 4;
if (value1 >= 10000 && value1 < 100000)
readlength = 5;
if (value1 >= 100000 && value1 < 1000000)
readlength = 6;
if (value1 >= 1000000 && value1 < 10000000)
readlength = 7;
if (value1 >= 10000000 && value1 < 100000000)
readlength = 8;
*writedata = 0;
itoa(value1, writedata, 10);
strcpy(writeaddress, &address1);
strcat(writeaddress, &address2);
strcat(writeaddress, writedata);
strcpy(readaddress, address1);
strcat(readaddress, address2);
typevalue = 1;
}
この関数は、入力されています。
このコードの結果は次のようになります。 '' '5 ASCii文字を値の前に連結しています。私は、コードを実行したときしかし、私が得る結果は次のとおりです。
" \005 \0055"
私のコードは私の文字の間に余計な文字を連結しているようだと私は上記のコードがそれを加えるところを確認していません。私はコードを踏んできたので、問題はどこにあるのか分かりません。
あなたは 'C++ 'を使用できますか?これは(cstrings、mallocおよびcstring関数を使用して) 'C++ 'を使用するときにはこれを行う方法ではありません。 – drescherjm
'std :: string'を使ってください。お願いです。 – erip
使用している未定義の変数は何ですか?それらはどこに定義されていますか?彼らはどのように初期化されますか? '-128'から' 127'( '' char'の符号性に依存して '0'から' 255')までではないことがわかっているとき、 'value1'のような大きな範囲を調べているのはなぜですか?そして最後に、あなたは 'value3'と' value4'をどこで自由にしますか? –