if(ret_val) { find = strchr(st, '\n'); if(find) { *find = '\0'; } else { while(getchar() != '\n') continue; } }
时间: 2024-02-10 18:30:09 浏览: 101
这段代码是在检查 `fgets()` 函数是否成功读取了一行字符,如果成功读取了一行字符,则将换行符替换为字符串结束符'\0',以便后续处理字符串。如果 `fgets()` 函数未读取到完整的一行字符,则需要清除输入缓冲区中的多余字符,以便下一次输入可以正常进行。具体来说,`strchr()` 函数用于查找字符串中第一次出现指定字符的位置,这里是查找字符串中是否有换行符。如果有,则将其替换为'\0';否则,通过 `while` 循环读取输入缓冲区中多余的字符,直到遇到换行符为止。
相关问题
char *s_gets(char *st, int n) { char *ret_val; char *find; ret_val = fgets(st, n, stdin); if(ret_val) { find = strchr(st, '\n'); if(find) { *find = '\0'; } else { while(getchar() != '\n') continue; } } return ret_val; }
这是一个函数定义,用于从标准输入流(stdin)中读取用户输入并将其存储在一个字符数组(st)中,直到达到指定的最大字符数(n)或遇到换行符为止。它的返回值是一个指向字符数组的指针,或者在遇到文件结束或出现错误时返回 NULL。
这个函数使用了标准库函数 fgets() 来读取用户输入,并且在读取完毕后对字符串进行处理,以确保它以 null 字符('\0')结尾,并且不包含换行符。具体来说,它在字符串中查找换行符,如果找到了则将其替换为 null 字符;如果没有找到,则使用 while 循环读取和丢弃输入,直到遇到换行符为止。
这个函数的作用类似于 gets() 函数,但是比 gets() 更安全,因为它允许您指定最大字符数,并且不会导致缓冲区溢出。
static int set_charger_type(void) { int ret; static int old_type_en = 0; union power_supply_propval val; struct power_supply *psy = power_supply_get_by_name("bbc"); if (psy == NULL) { pr_info("power_supply_get_by_name error.\n"); return -1; } val.intval = chr_type_en; pr_info("set_charger_type: %d.\n", val.intval); if (val.intval) { if (!old_type_en) { ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val); old_type_en = 1; } power_supply_changed(psy); val.intval = POWER_SUPPLY_TYPE_WIRELESS; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (!ret) { return val.intval; } else { return 0; } } else { val.intval = POWER_SUPPLY_TYPE_USB; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (ret < 0) pr_info("set chg psy failed\n"); power_supply_changed(psy); old_type_en = 0; } return 0; }将这段函数进行改写,使用dev_name(ddata->dev)来动态获取设备名称
static int set_charger_type(struct device *dev) {
int ret;
static int old_type_en = 0;
union power_supply_propval val;
struct power_supply *psy = power_supply_get_by_name(dev_name(dev));
if (psy == NULL) {
pr_info("power_supply_get_by_name error.\n");
return -1;
}
val.intval = chr_type_en;
pr_info("set_charger_type: %d.\n", val.intval);
if (val.intval) {
if (!old_type_en) {
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val);
old_type_en = 1;
}
power_supply_changed(psy);
val.intval = POWER_SUPPLY_TYPE_WIRELESS;
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val);
if (!ret) {
return val.intval;
} else {
return 0;
}
} else {
val.intval = POWER_SUPPLY_TYPE_USB;
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val);
if (ret < 0)
pr_info("set chg psy failed\n");
power_supply_changed(psy);
old_type_en = 0;
}
return 0;
}
阅读全文