我在微控制器中创建了 C 程序,并且想将我的 C 程序中的字符串与从我的 PC 接收到的字符串进行比较,我的 PC 中使用 C# 的程序,并且默认情况下 C# 中的字符串不包含空字符。
那么,我的 c 程序不会自动在从 PC 接收的字符串中添加空字符吗?
strcmp 函数是否可以比较 2 个字符串,1 个字符串包含空字符,另一个不包含空字符?
我在微控制器中创建了 C 程序,并且想将我的 C 程序中的字符串与从我的 PC 接收到的字符串进行比较,我的 PC 中使用 C# 的程序,并且默认情况下 C# 中的字符串不包含空字符。
那么,我的 c 程序不会自动在从 PC 接收的字符串中添加空字符吗?
strcmp 函数是否可以比较 2 个字符串,1 个字符串包含空字符,另一个不包含空字符?
C中字符串的定义(来自维基百科)是
字符串是由第一个零代码(对应于 ASCII 空字符)终止的代码单元的连续序列。
也就是说,如果没有 NUL 字符,您就不能使用像strcmp()
or这样的标准字符串函数strcpy()
,并且最终可能会破坏内存。
您可以做两件事:Char.MinValue
在传输之前在 C# 代码中的字符串末尾添加。
string str = "Hello,World!" + Char.MinValue; // Add NUL
.
或者您可以编写自己的字符串比较函数,例如
int myStrcmp(char* str1, char* str2, int len)
{
int retVal = 0,
for(int loopcnt = 0; loopcnt < len; loopcnt++)
{
if((*str1) > (*str2))
{
retVal = -1;
break;
}
else if((*str1) < (*str2))
{
retVal = 1;
break;
}
str1++;
str2++;
}
return retVal;
}
但是,您将需要字符串的长度。如果您已经知道长度,那么手动添加 NUL 字符会更好更快。:-)