关于string,null字符和strcmp

时间:2015-03-09 09:54:58

标签: c strcmp null-terminated c-strings

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

那么,我的c程序是否自动在从PC收到的字符串中添加空字符?

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

1 个答案:

答案 0 :(得分:0)

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字符会更好,更快。 : - )