在内核模块中基于缓冲区和长度创建字符的问题

Problem to create char based on buffer and length in kernel module

我尝试从内核模块中的用户空间获取字符串。在我手动设置字符大小之前,它似乎工作正常。但是,我需要让它动态化,所以如果我使用 len 参数,它会在 char.

的末尾显示奇怪的符号
static ssize_t msecurity_write(struct file *filep, const char *buffer, size_t len, loff_t *offset){
  
    char chars[12];
    if(copy_from_user(chars,buffer,len)){
        return -EFAULT;
    }

    printk(KERN_ALERT "Output> %s", chars);
    printk(KERN_ALERT "lengh> %i", len);

    return len;
 
}

第一个输出用于 char[len],第二个已手动设置 char[12]。即使你打印 len 它显示值 12.

C 字符串以 null 字符结束。此字符不包括在任何字符串长度计算中,但必须包括在内。

因此长度为 12 的字符串需要 13 个字节,最后一个字节等于 0。