gpt4 book ai didi

c++ - 将指向 char* 数组的指针传递给函数以在 Arduino 上操作值

转载 作者:太空宇宙 更新时间:2023-11-04 07:17:52 32 4
gpt4 key购买 nike

[请检查下面的最终编辑以获取更新]

我的 C++ 有点生疏(至少可以这么说),我在尝试将 char 数组传递给函数以操纵值时遇到问题。示例代码如下:

void myFunction(char* splitStrings,String stringToSetInLoop) {
char substringPtr[stringToSetInLoop.length()];
stringToSetInLoop.toCharArray(substringPtr, stringToSetInLoop.length());

for(int i = 0; i < 10; i++) {
splitStrings[i] = *substringPtr;
}
}

char *mySplitStrings[10];
myFunction(*mySplitStrings,String("Repeat Me"));
Serial.println(mySplitStrings[0]);

代码没有崩溃,但输出了一个空行。我怀疑我需要在函数外部初始化一个二维数组才能传入,以便分配内存空间。我猜想,虽然子字符串指针存在于函数内部,但内存被破坏了,留下 char* 数组 mySplitStrings[0] 没有任何指向。另外,我认为我需要传入对数组内存空间的引用,而不是作为指针。

这里的最终目标是能够将 char 数组传递给函数,为其分配一些值,然后在主代码循环中使用这些值。如果有更好的方法来实现这一点,请告诉我。

提前致谢。请把我从个人指针/引用 hell 中解放出来!

编辑:进一步注意,此代码正在 arduino 上运行,因此 C++ 是有限的。

编辑:当我尝试传递对 char* 指针的引用时,出现此错误,我不确定如何更改函数参数以修复:错误:无法转换 char* () [10]char 参数 1 到 void myFunction(char*, String)。任何人都可以尝试向我展示一个工作示例吗?

编辑:

感谢回复...我现在有了一个工作静态库函数,它可以拆分作为 char* 数组传递的字符串。我知道它不漂亮,但它确实有效。感谢那些做出贡献的人。代码如下:

void ExplodeString::explode(char* explodeResults[], String str, String delimiter) {
int delimiterPosition;
int explodeResultsCounter=0;
String subString;
do {
delimiterPosition = str.indexOf(delimiter);
if(delimiterPosition != -1) {
subString = str.substring(0,delimiterPosition);
char *subStringPtr[subString.length()+1];
subString.toCharArray(*subStringPtr, subString.length()+1);
explodeResults[explodeResultsCounter++] = strdup(*subStringPtr);
str = str.substring(delimiterPosition+1, str.length());
} else { // here after the last delimiter is found
if(str.length() > 0) {
subString = str;
char *subStringLastPtr[subString.length()+1];
subString.toCharArray(*subStringLastPtr, subString.length()+1);
explodeResults[explodeResultsCounter++] = strdup(*subStringLastPtr);
}
}
} while (delimiterPosition >=0);
}

用法:

char* explodeResults[10];
ExplodeString::explode(explodeResults, String("cat:dog:chicken"), String(":"));
Serial.println(explodeResults[0]);
Serial.println(explodeResults[1]);
Serial.println(explodeResults[2]);

编辑:伙计,当你使用 stdlib 时,这就容易多了:

void ExplodeString::explode(std::vector<std::string> &explodeResults, std::string str, char delimiter) {
std::stringstream data(str);
std::string line;
while(std::getline(data,line,delimiter))
{
explodeResults.push_back(line);
}
}

用法:

std::vector<std::string> commandsResult;
char delimiter[] = ",";
std::string _inputString = "my,string,to,parse";
ExplodeString::explode(commandsResult, _inputString, delimiter[0]);

最佳答案

如何传递一个char*数组:

void myFunction(char* splitStrings[10], String stringToSetInLoop) {
// ...

char *mySplitStrings[10];
myFunction(mySplitStrings, String("Repeat Me"));

这也行:

void myFunction(char* splitStrings[], String stringToSetInLoop) {

还有这个:

void myFunction(char** splitStrings, String stringToSetInLoop) {

此外,似乎有 STL对于 avr 平台 - 包括它,没有 STL 的 C++ 很奇怪。

关于c++ - 将指向 char* 数组的指针传递给函数以在 Arduino 上操作值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23134331/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com