在内核模块中基于缓冲区和长度创建字符的问题
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。
我尝试从内核模块中的用户空间获取字符串。在我手动设置字符大小之前,它似乎工作正常。但是,我需要让它动态化,所以如果我使用 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。