今天遇到Windows 10里安装的Ubuntu(WSL)的缺点

news2024/11/20 2:23:35

随着技术的发展,越来越多开发者转向使用 Windows Subsystem for Linux(WSL)在 Windows 10 上进行开发,也就是说不用虚拟机,不用准备多一台电脑,只需要在Windows 10/11 里安装 WSL 就能体验 Linux 系统。因此我在 Win10 系统里安装了Ubuntu 20 系统学习 Linux 基础,可以用来编译 C / C++ 代码,体验同一个代码编译运行与 Windows 环境下的差别。

之前就听说 WSL 有一些潜在的限制,无论性能还是功能都不能100%取代裸机 Linux 系统。今天就被我逮到 WSL 下的 Ubuntu 的一个缺点:输出宽字符串(wide string)时失败。

比如下面一段把普通字符串转换成宽字符串的 C 代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>
    
int main() {
	// Windows环境下要设为 setlocale(LC_ALL, "en-US.UTF-8");
	// Linux环境下设为 setlocale(LC_ALL, "");
	// 设置不当的话,转换后的宽字符串长度不正确
    setlocale(LC_ALL, "");

    char* str = "22年2月22日";
    int len = strlen(str);
    printf("narrow string: %s\n", str);
    printf("narrow string length: %d\n", len);

    wchar_t* wstr = (wchar_t*)malloc((len + 1) * sizeof(wchar_t));
    size_t wlen = mbstowcs(wstr, str, len+1);

    wprintf(L"wide string: %ls\n", wstr);
    printf("wide string length: %zu\n", wlen);
    for(size_t i=0; i<wlen; i++)
        wprintf(L"%lc\t%d\n", wstr[i], (int)wstr[i]);

    free(wstr);
    return 0;
}

这段代码将普通字符串“22年2月22日”转换成宽字符串格式,得出正常的长度为8,然后输出各个字符值。在 Windows 环境下,必须在主程序里设置setlocale(LC_ALL, "en-US.UTF-8");或者setlocale(LC_ALL, "zh-CN.UTF-8");,使用 clang 编译运行的结果才能正常:
在这里插入图片描述
到了 WSL 的 Ubuntu 环境,由于Ubuntu终端的字符编码默认是UTF-8,因此主程序中要把 LC_ALL后面的字符串置空:setlocale(LC_ALL, "");,然后编译运行:

在这里插入图片描述
转换后的宽字符串长度是8,这是正确的,但是无法输出转换后的字符串以及每个字符对应的值。我尝试了各种办法修改 wprintf 和 printf 语句,但输出结果无济于事,令人百思不得其解。

直到后来我在安卓手机上安装了Termux(一款运行于安卓系统的 Linux 模拟器),然后在手机上运行 clang 编译再运行 ~~ 结果一切正常了。

在这里插入图片描述

换了环境,豁然开朗!

由此可见 Windows 10 的 WSL(Ubuntu) 在处理特定操作时确实有其局限性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1221465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最大似然估计的介绍

最大似然估计&#xff08;Maximum Likelihood Estimation&#xff0c;简称MLE&#xff09;是一种用于估计概率分布中参数的方法。该方法的核心思想是选择使得观察到的数据在给定模型下出现的概率最大的参数值作为估计值。 最大似然估计具有很好的性质&#xff0c;包括渐进正态性…

新手老师怎么发布班级查询?

现在科技发展飞快&#xff0c;班级查询系统已经成为了许多学校必备的教务工具。可以让学生们快速查找到班级的各项信息&#xff0c;包括但不限于课程安排、考试成绩、分班等。对老师来说&#xff0c;班级查询系统可以提高工作效率&#xff0c;减少重复劳动&#xff0c;学生或者…

postman查询数据库-Xmysql

步骤1&#xff1a;安装node.js 下载地址:Download | Node.js步骤2&#xff1a;安装Xmysql工具&#xff0c;命令行输入 npm install -g xmysql &#xff0c;过程中会自动安装相关依赖&#xff1b;步骤3&#xff1a;连接数据库 xmysql -h ip -u 账号 -p 密码 -d 库名 如下表示连…

Attention Transformer

来源老师课件&#xff0c;方便以后复习。 课参考链接&#xff1a; http://jalammar.github.io/illustrated-transformer/ 之前的知识链接&#xff1a; 【知识链接】WGAN Transformer Vit Swin-Transformer Swin-Unet Res-Vit TransUNet MAE Bra ADDA 打分函数&#xff1a; 多头…

腾讯云便宜服务器有哪些?腾讯云这个服务器一个月7块钱!

大家好&#xff0c;今天我们来一起探讨一下腾讯云便宜服务器的相关问题。相信很多人在寻找可靠的云服务器时都会关注价格&#xff0c;而腾讯云作为国内领先的云计算平台&#xff0c;其价格优惠的服务器产品也是备受关注。那么&#xff0c;腾讯云便宜服务器有哪些呢&#xff1f;…

apifox中get请求传递集合方式

项目中get请求需要传递集合方式: 接口中接收方式: GetMapping("/findGoodsCouponInfoVos") public ApiResult findGoodsCouponInfoVos(RequestParam(value "selectedCouponIds",required false) List<Integer> selectedCouponIds, NotNull(messa…

flink中配置Rockdb的重要配置项

背景 由于我们在flink中使用了状态比较大&#xff0c;无法完全把状态数据存放到tm的堆内存中&#xff0c;所以我们选择了把状态存放到rockdb上&#xff0c;也就是使用rockdb作为状态后端存储,本文就是简单记录下使用rockdb状态后端存储的几个重要的配置项 使用rockdb状态后端…

59 权限提升-Win溢出漏洞及ATSCPS提权

目录 知识点必备&#xff1a;windows权限认识(用户及用户组)0x01 普通权限0x02特殊权限 演示案例:基于WEB环境下的权限提升-阿里云靶机基于本地环境下的权限提升-系统溢出漏洞基于本地环境下的权限提升-AT&SC&PS命令 案例给到的思路点总结如下:涉及资源: 这个章节会讲到…

122.Android 简单的历史搜索

第一步 FlowLayout&#xff1a; public class FlowLayout extends ViewGroup {private int mHorizontalSpacing dp2px(16); //每个item横向间距private int mVerticalSpacing dp2px(8); //每个item横向间距private List<List<View>> allLines new ArrayList<…

PyCharm中常用插件推荐

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Jmeter进行压力测试不为人知的秘密

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是免…

37 关于 undo 日志

前言 undo 和 redo 是在 mysql 中 事务, 或者 异常恢复 的场景下面 经常会看到的两个概念 这里 来看一下 undo, undo 主要是用于 事务回滚 的场景下面 测试表结构如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(128) DEFAULT NUL…

python基础教程之有序字典

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 有序字典和通常字典类似&#xff0c;只是它可以记录元素插入其中的顺序&#xff0c;而一般字典是会以任意的顺序迭代的。 普通字典&#xff1a; d1{} d1[a]A d1[b]B d1[c]C d1[d]D #此时的d1 {a:A,b:B,c:C,d:D} for k,v …

本地jar导入maven

一、通过dependency引入 1.1. jar包放置&#xff0c;建造lib目录 1.2. pom.xml文件 <dependency><groupId>zip4j</groupId><artifactId>zip4j</artifactId><version>1.3.2</version><!--system&#xff0c;类似provided&#x…

【Linux】第十八站:进程等待

文章目录 一、进程等待的必要性1.进程等待是什么2.进程等待的必要性3.为什么要进程等待呢&#xff1f; 二、进程等待的方法1.问题2.wait3.waitpid4.status的原理5.等待失败6.与status有关的两个宏7.options 一、进程等待的必要性 1.进程等待是什么 通过系统调用wait/waitpid&a…

压缩感知学习

对稀疏和稀疏矩阵的认识 采样率80Mhz 采样间隔12.5ns,样本数量为800个 一帧时长800*12.5ns 10us 频域间隔 1/10us 0.1Mhz 第一个点的频率是0 第21个点的频率是2Mhz 在只考虑正半轴&#xff0c;也即400个点的情况下&#xff0c;分别让不同的频点取1 &#xff0c;然后对其进…

MySQL优化的底层逻辑

文章目录 前言索引的底层结构数据与索引的关系聚簇索引的数据存储普通索引的数据存储 索引的命中逻辑怎么理解索引失效总结 前言 去年刚开始写博客的时候写了一篇《MySQL性能调优参考》&#xff0c;文章中提到优化的几个技巧&#xff0c;比如数据类型的使用、范式和反范式的合…

安装部署Esxi7.0并创建虚拟机

1. Esxi介绍 ESXI虚拟平台是VMware出品的一个强大平台&#xff0c;它可以直接安装在物理机上&#xff0c;从而充分利用物理奖性能&#xff0c;虚拟多个系统出来。ESXI是一个带WEB管理后台的软件&#xff0c;非常适合安装在服务器上&#xff0c;然后直接通过网页进行远程管理。…

测试开发环境下centos7.9下安装docker的minio

按照以下方法进行 1、安装docker&#xff0c;要是生产等还是要按照docker-ce yum install docker 2、启动docker service docker start 3、 查看docker信息 docker info 4、加到启动里 systemctl enable docker.service 5、开始docker pull minio/minio 但报错&#x…

TP-LINK联洲面试题

文章目录 1.说一下微服务架构?2.微服务优缺点3.负载均衡的实现算法4.Redis集群部署方式?5.MySQL主从复制?5.1 配置流程5.2 优缺点分析6.口头手撕快排7.队列实现栈和栈实现队列7.1 队列实现栈7.2 栈实现队列8.进程有几种状态?9.Spring Boot Actuator?10.外键、主键和索引?…