我需要测试一个char *,以便比较它是否有0到3之间的长度,如果字符是'1','2'或'3'并且不重复它们。我在内核空间(编程模块)工作,我不知道如何格式化,我正在使用copy_to_user,但我不知道如何知道char []的长度(而不是字节长度, char数组的最大索引)我的当前代码失败并且有时会占用奇怪的字符。这是一个驱动程序,所以当我从另一个不相关的文件中写入相关文件(使用fprintf)时,它就会被废弃。
static ssize_t module_write(struct file *filp, const char *buff, size_t len, loff_t * off){
char aux[BUF_MAX_LEN];
int salir =0;
int i =0;
//[...]
if(copy_from_user(aux,buff, len ) ) //Sometimes this makes a copy of random characters because of the length
return -EINVAL;
for (i = 0; salir == 0;i++){
if(aux[i] == '3'){
// [...]
}else if(aux[i] == '1'){
// [...]
}else if(aux[i]== '2'){
// [...]
}else if(aux[i] == '\n' || aux[i] == '\0'){
salir++;
}else{
printk(KERN_ALERT "Error, character not valid");
return -EINVAL;
}
if(i >=3) return -EINVAL;
}
//[...]
return length;
}