私は呼び出す必要がある機能を持つArduinoプロジェクト用のライブラリを使用しています。この関数は、const char*
の1つのパラメータを受け入れます。 fooとしましょう。int型の値を持つchar配列を入力してください
int
の値をfooに渡す必要があるので、最初にsprintf
を使用して変換します。ここまでは順調ですね。私はchar
に変換int
値で配列を埋めた後、配列の値のそれぞれにFOOを呼び出すしようとすると、
問題が来ます。
私はこの問題より良いを説明願っています:
#include <iostream>
using namespace std;
// This function cannot be modified because
// is a part of a library
void foo(const char *bar){
cout << "Result: " << bar << endl;
}
int main() {
char *values[10]; // My array of values
char tmp[10]; // Temporary buffer for the int > char conversion
for(int i = 0; i < 10; i++){
int samplevalue = i * 2; // Just a sample value, not important
sprintf(tmp, "%d", samplevalue); // Copy the sample value to the temporary buffer
values[i] = tmp; // Assign the value of the temp var to a position in my values array
cout << values[i] << endl;
}
cout << "==============" << endl;
// Here comes the problem:
for(int i = 0; i < 10; i++){
foo(values[i]);
}
return 0;
}
そのコードの出力は以下の通りです:
0
2
4
6
8
10
12
14
16
18
==============
Result: 18
Result: 18
Result: 18
Result: 18
Result: 18
Result: 18
Result: 18
Result: 18
Result: 18
Result: 18
あなたが見ることができるように、結果の全てが行が等しいです最後の値はtmp
varに割り当てられています。私は、values[10]
配列内の各値に、実際の値ではなくtmp変数へのポインタが含まれているからだと思います。
私はそれぞれの結果がの行と異なる番号を持っています。最初のfor
のように、ループします。
私はC++のエキスパートではありませんし、どんな助けも高く評価されることは間違いないと思います。
ありがとうございます!
あなたは1つの 'tmp'しか持っていませんが、なぜ複数の値を期待しますか? – stark
これは[tag:arduino]とタグ付けされているので、あなたは 'std :: sting'と' std :: to_string() 'へのアクセス権がないということですか? – NathanOliver
期待値(char *)values [10]またはchar(* values [10])、 ブラケットを使用して、使用しようとしている種類を指定してください。 –