今天在看正点原子stm32第92讲,关于GPS定位模块的例程的时候,用到了strstr,该语句的说明如下:
1. strstr
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
以上摘自百度百科:https://baike.baidu.com/item/strstr/811469?fr=aladdin
该语句的头文件为string.h
unsigned char *p = "$GPGSV123123" ;
unsigned char *rut = NULL ;
rut = strstr(p, "NO!");
设置中断点观察rut结果为:
0x00000000<NULL>
如果判断rut是否为空,应该使用
if(rut == NULL)
卡在这里很久是因为使用了
*rut==NULL
实际上0x00000000本身就代表空,其没有指向的内容,所以使用上一行命令是错误的。
2. 如何输出整段char字符串
关于输出整段字符串,贴上整段代码,在注释中有说明:
void main()
{
u8 *x = "12.34567,", *p = "$111GPGSV,546,ASDIOJF,1";
u8 comma_No = 1;
data = x;
u8* dx = "3";
unsigned char num_comma = NMEA_Comma_Pos(x, comma_No);
printf("第%d个逗号的位置是 %d\n", comma_No, num_comma);
//printf("data = %c\n", *data); //输出首字符
//printf("data = %s\n", data); //输出字符串
//int y = NMEA_Str2num(x, dx);
u8 * p1 = (u8*)strstr(p, "GPGSV");
if (p1 != NULL)
{
printf("p1 = %c\n", *p1); //输出p1首地址指向的内容
printf("p1 = %s\n", p1); //输出p1后的整段字符串
}
else printf("没有该字段\n");
system("pause");
}
结语
初学者的体悟,如果有错误请指正 ,谢谢!!
初学者的体悟,如果有错误请指正。