/////////////////单独遗留问题//////////////
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <stdarg.h>
//用来反馈结果
bool Wifi_ReturnStrings(char *InputString,const char *SplitterChars,uint8_t CountOfParameter)
{
char arg[CountOfParameter];//居然也可以!!!????????我怎么记得以前是不行的??
printf("%s\n",InputString );
printf("%s\n", SplitterChars);
}
int main(void)
{
char InputString[] = {"hello,iam,gkoson!what,you,name"};
Wifi_ReturnStrings( InputString, "," ,2);
return 1;
}
规范
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <stdarg.h>
#ifndef bool
# define bool int8_t
#endif
#ifndef false
# define false 0
#endif
#ifndef true
# define true 1
#endif
#ifndef NULL
# define NULL 0
#endif
//用来反馈结果
bool Wifi_ReturnStrings(char *InputString,const char *SplitterChars,uint8_t CountOfParameter,...)
{
if (CountOfParameter == 0)
return false;
va_list tag;
va_start(tag, CountOfParameter);
char *arg[CountOfParameter];//这里居然可以!!!
for(uint8_t i=0; i<CountOfParameter; i++)
arg[i] = va_arg (tag, char *);
va_end(tag);
char *str;
str = strtok(InputString, SplitterChars);
if (str == NULL)
return false;
uint8_t i = 0;
while (str != NULL)
{
str = strtok(NULL, SplitterChars);
if (str != NULL)
CountOfParameter--;
strcpy(arg[i], str);
i++;
if (CountOfParameter == 0)
{
return true;
}
}
return false;
}
int main(void)
{
char InputString[] = {"hello,iam,gkoson!what,you,name"};//不能是指针 需要是数组 因为需要token它 内存切割
char OutputString[2][50]; //用来保存反馈的结果
Wifi_ReturnStrings( InputString, "," ,2, OutputString[0],OutputString[1]);
printf("%s\n",OutputString[0] );
printf("%s\n",OutputString[1] );
return 1;
}
bool Wifi_WaitForString(uint32_t TimeOut_ms,uint8_t *result,uint8_t CountOfParameter,...)
{
if (result == NULL)
return false;
if (CountOfParameter == 0)
return false;
*result=0;
va_list tag;
char *arg[CountOfParameter];
va_start(tag, CountOfParameter);
for(uint8_t i=0; i<CountOfParameter; i++)
arg[i] = va_arg (tag, char *);
va_end(tag);
//////////////////////////////////
for (uint32_t t = 0; t < TimeOut_ms; t += 50)
{
rt_thread_delay(rt_tick_from_millisecond(50));
for (uint8_t mx = 0; mx < CountOfParameter; mx++)
{
if (strstr((char*) Wifi.RxBuffer, arg[mx]) != NULL)
{
*result = mx + 1;
return true;
}
}
}
// timeout
return false;
}