c - strcpm() 它不给我平等
问题描述
我试图从用户那里获取缓冲区,当缓冲区等于 00 B 或 00 W 时,它会跳转到 if 语句,但由于某种原因缓冲区最终大于 0。我已经打印出缓冲区是什么,它是提示时为 00 B 或 00 W。为什么是这样??我在比较错误的东西吗?
ssize_t chess_write(struct file *pfile, const char __user *buffer, size_t length, loff_t *offset)
{
int black;
int white;
sprintf(msg, "%s(%zu letters)", buffer, length);
msg_size = strlen(msg);
LOG_INFO("In function %s\n", __FUNCTION__);
LOG_INFO("buffer test in write %s", buffer);
black = strcmp(buffer, "00 B");
white = strcmp(buffer, "00 W");
if (black == 0)
{
LOG_INFO("Chess: Initiate chess as black pieces\n");
}
else if (black < 0)
{
LOG_INFO("Chess: black is less than 0\n");
}
else if (black > 0)
{
LOG_INFO("Chess: black is greater than 0\n");
}
else if (white == 0)
{
LOG_INFO("Chess: Initiate chess as white pieces\n");
}
LOG_INFO("Chess: Wrote %zu characters from the user\n", length);
return length; // return bytes wrote
}
我得到的结果是这样的
[Apr29 18:58] [chess] Module Started
[ +0.000005] [chess] Device class resgistered correctly
[ +0.000077] [chess] Device created correctly
[ +3.632050] [chess] In function chess_open
[ +0.000706] [chess] In function chess_write
[Apr29 19:00] [chess] In function chess_write
[ +0.000003] [chess] buffer test in write 00 B
[ +0.000001] [chess] Chess: black is greater than 0
[ +0.000001] [chess] Chess: Wrote 5 characters from the user
[ +0.001368] [chess] In function chess_read
[ +0.000002] [chess] buffer test in read 00 B
(5 letters)
[ +0.000001] [chess] Chess: black is greater than 0
[ +0.000002] [chess] Chess: Read 16 characters to the user
[ +0.002089] [chess] In function chess_write
[ +0.000002] [chess] buffer test in write 01
[ +0.000000] [chess] Chess: black is greater than 0
[ +0.000001] [chess] Chess: Wrote 3 characters from the user
[ +0.007073] [chess] In function chess_read
[ +0.000001] [chess] buffer test in read 01
(3 letters)
[ +0.000001] [chess] Chess: black is greater than 0
[ +0.000001] [chess] Chess: Read 14 characters to the user
附言。我在另一个文件中处理 LOG_INFO
#define _CONFIG_PRINTK(once, level, fmt, ...) \
do{ \
printk##once(KERN_##level "[" MODULE_NAME "] " fmt, \
##__VA_ARGS__); \
} while(0)
#define LOG_INFO(format, ...) _CONFIG_PRINTK(, INFO, format, ##__VA_ARGS__)
#define LOG_WARNING(format, ...) _CONFIG_PRINTK(, WARNING, format, ##__VA_ARGS__)
#define LOG_ERROR(format, ...) _CONFIG_PRINTK(, ERR, format, ##__VA_ARGS__)
解决方案
推荐阅读
- azure-cosmosdb - Unbale 在 Cosmos DB 模拟器中创建容器
- async-await - Async/Await 模拟繁忙的服务器,延迟更新到客户端浏览器
- python - 如何预测第 n 棵树的 H2O GBM 模型?
- java - 如何修复我的循环,将输入键作为 Java 中的 input.in?
- python - PyArrow:从分区拼花数据集中读取单个文件出乎意料地慢
- java - 如何在文件编写器上换行?
- flutter - 颤振 - 容器子不占用整个容器
- http - Nginx 顶级域有 ssl 错误详细说明子域
- python - Amadeus_Login_automation[网页抓取]
- java - 在 Hibernate 中获取多个 OneToMany 关系(与 Ebean fetch 相对)