C 内核字符串连接和比较

标签 c string kernel

作为引用,我对 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', ...}相同还是我在这里遗漏了什么?

最佳答案

为什么不能与文字比较?将您的代码更改为以下内容:

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)
    printf("You can't do anything yet.\n");

current_cmd[0] = '\0';

关于C 内核字符串连接和比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17559996/

相关文章:

string - Erlang 如何从列表中获取字符串

algorithm - 将字符串转换为数字,反之亦然

c - strcpy执行可能出现的错误

python - Jupyter Notebook 只有 Python [conda root] 和 Python [default] 内核

c - 执行完所有程序后在程序末尾出现段错误?

c - 如何通过cmd执行C文件

c - 没有临时数组的fortran数组 reshape

c - 未初始化的值是由堆分配创建的。为什么?

c - 如何在从多个目录/文件编译内核模块时创建新目录并将 .o 文件移动到其中

linux - 如何在内核模块中断中触发一个函数