公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你好!

我需要一些帮助才能开始使用这个功能。

我做了一个简单的代码,意图用逗号作为分隔符来标记字符串。

我尝试在 PC 上模拟以下代码并将其改编为 PSoc5LP:

  

int 主要 ()

{

字符串 [] = “102*103;K1.2;K0.5”;

char *token;

 

标记 = strtok(字符串,“;”);

 

如果(标记 == 空){

puts(“空字符串!”);

返回 1;

}

 

而(代币){

//打印代币

看跌期权(代币);

 

//再次解析同一个字符串

代币 = strtok(空,“;”);

 

我无法让指针指向每个代币的第一个字符。

我想知道 PSOC Creator 4.4 中是否有一些设置可以阻止 strtok 操作。

谢谢你的任何帮助。

 

 

 

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

@AlVa_264671

以下是有效的代码:

#include 
#include 
#include 
#include 
#include 

#define TOKEN	","
int main()
{   
char* tok;
char rx_str[]="46,1.77,98.70";    
char   *ptr_0 =NULL;
char   *ptr_1 =NULL;
char   *ptr_2 =NULL;
char   *ptr_3 =NULL;

//    CyGlobalIntEnable; /* Enable all interrupts by the processor. */

			tok = rx_str;	// set the first token
	// The strtok() will find the first token in the string and set the token found to '\0'
            tok = strtok(tok, TOKEN );
            ptr_0   = tok;
			tok = tok + strlen(tok) + 1;	// advance the token pointer to the start of the next token
            tok = strtok(tok, TOKEN);
            ptr_1   = tok; 
			tok = tok + strlen(tok) + 1;	// advance the token pointer to the start of the next token
            tok = strtok(tok, TOKEN);
            ptr_2   = tok;
			tok = tok + strlen(tok) + 1;	// advance the token pointer to the start of the next token
            tok = strtok(tok, TOKEN);
            ptr_3   = tok; 
   
             CY_NOP;
			for(;;) {}
} 

在原帖中查看解决方案

0 点赞
5 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 @AlVa_264671

我试过你的代码它对我有用。

int main()
{   
   char rx_str[]="46,1.77,98.70";
   char   *ptr_0 =NULL;
   char   *ptr_1 =NULL;
   char   *ptr_2 =NULL;
   char   *ptr_3 =NULL;
   CyGlobalIntEnable;
   char* tok = strtok(rx_str, ",");
	while (tok != NULL ) {
		ptr_0   = tok;                       
		  tok = strtok(NULL, ",");                  
	}
}	

ADSW_0-1699332784171.png

从项目中的问题来看,你需要打印每个代币的价值吗?


热烈的问候,
安德里

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@AlVa_264671

以下是有效的代码:

#include 
#include 
#include 
#include 
#include 

#define TOKEN	","
int main()
{   
char* tok;
char rx_str[]="46,1.77,98.70";    
char   *ptr_0 =NULL;
char   *ptr_1 =NULL;
char   *ptr_2 =NULL;
char   *ptr_3 =NULL;

//    CyGlobalIntEnable; /* Enable all interrupts by the processor. */

			tok = rx_str;	// set the first token
	// The strtok() will find the first token in the string and set the token found to '\0'
            tok = strtok(tok, TOKEN );
            ptr_0   = tok;
			tok = tok + strlen(tok) + 1;	// advance the token pointer to the start of the next token
            tok = strtok(tok, TOKEN);
            ptr_1   = tok; 
			tok = tok + strlen(tok) + 1;	// advance the token pointer to the start of the next token
            tok = strtok(tok, TOKEN);
            ptr_2   = tok;
			tok = tok + strlen(tok) + 1;	// advance the token pointer to the start of the next token
            tok = strtok(tok, TOKEN);
            ptr_3   = tok; 
   
             CY_NOP;
			for(;;) {}
} 
0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

非常感谢这段代码。

如何实现该功能的细节有点隐藏,我一直在网上浏览,但我在这里找不到你给我的细节,

我会试试的。

再次感谢。

 

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你好!

谢谢,是的,它适用于第一个代币。

正如你已经提到的,ptr_0 指向 r x_str 的第一个字符。

是的,我需要按照C字符串定义在单独的字符串中恢复每个标记;以空字符结尾。

因此,ptr_1 和 ptr_2 也应该指向其他标记的第一个字符。

我收到了一个我还没尝试过的非常详尽的方法,请告诉我你的方法。

问候,

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

谢谢它起作用了!!!😊

0 点赞