Ich verwende eine Bibliothek für ein Arduino-Projekt, das eine Funktion hat, die ich aufrufen muss. Diese Funktion akzeptiert nur einen Parameter des Typs const char*
. Nennen wir es foo.Füllen Sie ein Char-Array mit Int-Werten
Ich muss einige int
Werte zu foo übergeben, also konvertiere ich sie zuerst mit sprintf
. So weit, ist es gut.
Das Problem kommt, wenn ich versuche, ein Array mit int
Werte char
umgewandelt zu füllen und dann foo mit jedem der Werte im Array nennen.
Ich hoffe, das erklärt das Problem besser:
#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;
}
Der Ausgang dieses Codes ist folgende:
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
Wie Sie sehen können, die alle die Ergebnis Linien sind gleich der letzte Wert, der dem tmp
var. Ich nehme an, es liegt daran, dass jeder der Werte im Array values[10]
einen Zeiger auf die Variable tmp statt auf seinen tatsächlichen Wert enthält.
Was ich möchte, ist eine andere Nummer auf jedem Ergebnis Zeile, wie in der ersten for
Schleife.
Ich denke, es ist ziemlich offensichtlich, dass ich nicht einmal in der Nähe bin, ein C++ - Experte zu sein, und jede Hilfe wird sehr geschätzt.
Danke!
Sie haben nur ein 'tmp' also warum würden Sie mehrere Werte erwarten? – stark
Da dies als [tag: arduino] markiert ist, bedeutet das, dass Sie keinen Zugriff auf 'std :: sting' und' std :: to_string() 'haben? – NathanOliver
Erwarten Sie (char *) Werte [10] oder char (* Werte [10]), Stellen Sie sicher, dass Sie Klammern verwenden, um anzugeben, welche Art Sie verwenden möchten. –