0

マイクロコントローラーで C プログラムを作成し、C プログラムの文字列を PC から受信した文字列と比較したい、C# を使用した PC のプログラムで、C# のデフォルトの文字列には null 文字が含まれていません。

それで、私の C プログラムは、PC から受信した文字列に null 文字を自動的に追加しませんか?

また、strcmp 関数は 2 つの文字列を比較できますか?1 つの文字列には null 文字が含まれ、もう 1 つの文字列には null 文字が含まれていませんか?

4

1 に答える 1

0

C での文字列の定義 (ウィキペディアから) は

文字列は、最初のゼロ コード (ASCII ヌル文字に対応) で終了するコード単位の連続したシーケンスです。

strcmp()つまり、NUL 文字がないと、またはのような標準の文字列関数を使用できず、strcpy()メモリが破損する可能性があります。

Char.MinValue2 つのことを行うことができます:送信する前に、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 文字を手動で追加する方が適切で高速です。:-)

于 2015-03-09T10:25:30.017 に答える