gpt4 book ai didi

c - 如何将字符串标记保存到 char 变量?

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:14 27 4
gpt4 key购买 nike

我有一个使用 udp 发送的字符串。现在我想读取字符串,将其标记化并将其保存到 char 数组中。仅保存每个单词的第一个字母。所以我只得到从 element01 到 element05 的 5 个 e。我在 Arduino 工作,我知道一些 c# 但不知道 c 或 c++。

//p_params->packetBuffer contains the following string:
//element01#element02#element03#element04#element05

void packtStriper( receivedPacket * p_params )
{
char delims[] = "#";
char *result = NULL;
int i = 0;

//Tokenize string - 'split' it on hash mark
result = strtok( p_params->packetBuffer, delims );

//Iterate through the tokens and save them to my list
while( result != NULL )
{
p_params->listData[i] = *result;
i++;

result = strtok( NULL, delims );
}

//Display the data just received
for(int j =0; j<i; j++)
{
Serial.print( "Data " );
Serial.print( j );
Serial.print( ": " );

Serial.println( p_params->listData[j] );
}
}

typedef struct receivedPacket
{
char * REQType;
char * confName;
unsigned int confData[64];
char listData[10];
char packetBuffer[UDP_BUFFER_SIZE];
int packetSize;
int inProduction;

}receivedPacket;

由于以下代码打印了完整的元素名称,我想我可以只使用结果。但这也会返回一个错误。

char str[] = "element01#element02#element03#element04#element05";
char delims[] = "#";
char *result = NULL;
result = strtok( str, delims );
while( result != NULL ) {
printf( "result is \"%s\"\n", result );
result = strtok( NULL, delims );
}

最佳答案

下面一行:

p_params->listData[i] = *result

获取 result 的第一个字符,并将其复制到 p_params->listData 的第 i 个字符。所以只有每个标记的第一个字符被复制。您希望如何获得这些标记,作为 element01element02element03element04element05 的一个序列,或作为字符串数组?

请记住,在 C 和 C++ 中,字符数组仅包含一个字符串,简单地说。要保存多个字符串,您需要一组字符数组或一些定界符(这是您开始的地方...)。

编辑:

如果你想得到一个字符串数组,你可以使用下面的方法: declare listData as

char* listData[10];

这意味着 listData 现在最多可以容纳 10 个字符串。然后,不要将 *result 分配给 listData[i],而是使用以下内容:

p_params->listData[i] = strdup(result);

这将创建字符串的副本,并将其存储在下一个条目中。

注意:

  1. 如果要显示字符串,则必须再次循环,然后将它们一一打印出来。你不能只打印它们的整个数组。
  2. strdup 为您分配内存。处理完这些字符串后,您必须 free()
  3. 您的代码使用了魔数(Magic Number),这很糟糕。我假设这只是为了让这里更容易阅读;)
  4. 如果获取的元素超过 10 个,就会出现缓冲区溢出,因为 listData 最多只能容纳 10 个字符串。您至少应确保 iwhile 左右的时间内不会超过 9。

关于c - 如何将字符串标记保存到 char 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7308045/

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