在嵌入式系统上工作时,发现sprintf
、sscanf
和strcmp
没有被推荐。
-
sscanf
在某些实例中,我必须从字符串中解析数字和其他重要数据。此外,字符串可能包含不同类型的数据。
建议在嵌入式系统中替换sscanf的方法是什么?
-
sprintf
类似于
sscanf
,还需要sprintf
。 -
strcmp
,strstr
strcmp和strstr在项目中是必需的。
在嵌入式系统中,memcpy比strcmp更受欢迎吗?
在处理字符串时需要记住的主要要点是什么
char array[10]="data",copy[10];
for(int i=0;i<10 && array[i]!=' ';i++)
copy[i]=array[i];
这也是strcpy的替代方案吗?以上代码的可持续性如何
我不知道是谁告诉你strcmp
或strstr
是"不推荐";但事实并非如此。
如果你用printf和scanf系列函数用16kB的FLASH编程非常小的uC,那就太贵了(没有浮点和长支持的printf是5-7kB(。对于这种微型——编写自己的函数或使用微小的printf实现——你在网上有很多可用的工具。只需编写适合您的应用程序的简单解析器,而不必编写scanf。
您想要编写自己版本的strcpy
因此,取而代之的是:
char array[10]="data",copy[10];
for(int i=0;i<10 && array[i]!=' ';i++)
copy[i]=array[i];
你会有这样的东西:
// This sticks to specification from the standard C library.
// For your needs you may want something slightly different
// for example controlling the maximum size of the destination buffer
char *strcpy(char *to, const char *from)
{
char *dest = to;
while (*to++ = *from++) ;
return dest;
}
...
char array[10]="data",copy[10];
strcpy(copy, array);