我在微控制器中创建了C程序,并希望将C程序中的字符串与从我的PC接收到的字符串,使用C#在PC中的程序进行比较,并且默认情况下C#中的字符串不包含空字符。

因此,我的C程序不会在从PC接收的字符串中自动添加空字符吗?

strcmp函数是否可以比较2个字符串,1个字符串包含空字符,而另一个不包含空字符?

最佳答案

C语言中的字符串定义(来自维基百科)为


  字符串是连续的代码单元序列,由
  前一个零代码(对应于ASCII空字符)。


就是说,如果没有NUL字符,则无法使用strcmp()strcpy()之类的标准字符串函数,并且可能最终破坏内存。

您可以做两件事:
传输前,在C#代码的字符串末尾添加Char.MinValue

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字符。 :-)

关于c - 关于字符串,空字符和strcmp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28939108/

10-13 06:18
查看更多