参考までに、私が持っている strcat と strcmp の実装は次のとおりです。
char *
strcat(char *dest, const char *src)
{
int i,j;
for (i = 0; dest[i] != '\0'; i++)
;
for (j = 0; src[j] != '\0'; j++)
dest[i+j] = src[j];
dest[i+j] = '\0';
return dest;
}
int strcmp(const char* s1, const char* s2)
{
while(*s1 && (*s1==*s2))
s1++,s2++;
return *(const unsigned char*)s1-*(const unsigned char*)s2;
}
私はカーネルに取り組んでおり、いくつかの落とし穴につまずきました。基本的に、次のような文字列を作成しています。
unsigned char current_cmd[100];
char tmp[] = {kbdus[scancode], '\0'};
if (scancode != 0x1C) // enter key
strcat((char*)current_cmd, tmp);
次に、コマンドと一致するかどうかを比較します。
if (strcmp((const char*)cmd, "help") == 0)
puts((unsigned char*)"You can't do anything yet.\n");
それから私は:
current_cmd = (unsigned char)'\0';
使用できるようにリセットします。
動作しますが、理由や方法がよくわかりません。私がやっていることの理由と、コードに何か問題があるかどうかを誰かに説明してもらえますか?
第三にchar check[10] = {"help"};
、{'h', 'e', 'l', 'p', ...}
同じですか、それともここで何か不足していますか?