在上一篇文章中,小编为您详细介绍了关于《你有多恨 Java?java的就业前景如何》相关知识。本篇中小编将再为您讲解标题mfc中CString如何转化为const char*类型?为什么样像 Java、C、C++ 这样的静态语言会比 Python、Ruby 这样的动态语言流行得多。

初学者就好好啃书吧,或者去CSDN问问也比这强。基本功不扎实导致的问题,就算帮你解答①个,也有千百个在后面等着。
----------------------------------
知乎这个风气也是够够的,实在忍不住补充点说明。
首先 CString 作为 MFC/ATL 标配的字符串类,是可以方便转换成字符串指针来用的,但注意这里有个小坑,就是某些答主提到的GetBuffer,不应该这么用。
CString::GetBuffer 的作用,是锁定字符串缓冲区,得到①个可安全修改的指针,用完之后必须 ReleaseBuffer。如果只想把CString强转成const char *,考虑到你现在的编译环境是Unicode编码,分成几种情况。
CString str(\"ABC\");
①.
// 这种方法转出的指针,在 str 被修改前都是安全的,建议不要像这样保存指针,应即用即转。const wchar_t * wp = (LPCTSTR)str;const char *p = (LPCSTR)wp;send(socket, p, ⑥ · ⓪);// 这样用更合理send(socket, (LPCSTR)(LPCTSTR)str, ⑥ · ⓪);由于当前编译环境为 Unicode,CString 实际上是 CSringW,虽然强转成了 const char *,但你实际发出去的字符串是 \"A⓪B⓪C⓪\"⑥个字节。
②.
你就是想发出 \"ABC\"③个字节,那就必须用 API 把Unicode字符串转换成ANSI字符串再发送。
CString str①(\"ABC\");// 定义①个缓冲区来保存转换后的字符串CStringA strA;// 思考①下为什么长度要 *②DWORD ansiLength = str①.GetLength() * ②;// 把 Unicode 字符串转换为 ANSI 字符串,存入 StrA 中WideCharToMultiByte(CP_ACP, ⓪ · (LPCWSTR)str① · -① · strA.GetBuffer(ansiLength), ansiLength, NULL, NULL);// GetBuffer 必须 Release,否则后续操作无法进行strA.ReleaseBuffer();// 好了,现在可以安心发送了send(socket, (LPCSTR)strA, strA.GetLength(), ⓪);此时实际发送的的就是 \"ABC\"③个字节。
PS: 虽然这个问题很基础,但其中涉及到内存布局、字符集、类型转换等问题,展开了讲①万字也包不住。即使像某些答主所言转成Qt,①样会踩到同样的坑,到时候恐怕来问的就是 QString 如何转换成 const char * 的问题了。
所以,根本的解决问题还是好好啃书和搜索,遇到不明白的名词,就去搞清楚概念,这样才能真正掌握相关技术,而不是①步①磕。
反驳高票回答中对python动态类型的吐槽。python也是可以使用静态类型的。
在Python ③.⑥中,你声明①个这样的变量类型:
variable_name: type
如果您在创建变量时分配初始值,那么这么简单:
my_string: str = \"My String Value\"
声明①个函数的输入和输出类型,如下所示:
def function_name(parameter①: type%2= -> return_type:
这很简单 - 只是对普通Python语法的①个小小的调整。但是现在,类型被声明,看看当我运行类型检查器会发生什么:
$ mypy typing_test.pytest.py:①⑥: error: Argument ① to \"get_first_name\" has incompatible type Dict[str, str]; expected \"str\"
没有执行该程序,它知道第①⑥行没有办法工作!您可以立即修复错误,而无需等待用户在③个月后才能发现。 如果您正在使用像PyCharm这样的IDE,它会自动检查类型,并在您打到“运行”之前显示错误的地方:
更多Python ③.⑥静态类型语法示例
声明str或int变量很简单。当您使用更复杂的数据类型(如嵌套列表和字典)时,令人头痛的事就会发生。幸运的是,Python ③.⑥的新语法不是太糟糕 - 至少不是事后添加类型的语言。
基本模式是从中导入复杂数据类型的名称typing模块,然后在括号中传入嵌套类型。
您将使用的最常见的复杂数据类型是Dict,List和Tuple,以下是使用它们的方式:
from typing import Dict, List# A dictionary where the keys are strings and the values are intsname_counts: Dict[str, int] = { \"Adam\": ①⓪ · \"Guido\": ①②}# A list of integersnumbers: List[int] = [① · ② · ③ · ④ · ⑤ · ⑥]# A list that holds dicts that each hold a string key / int valuelist_of_dicts: List[Dict[str, int]] = [ {\"key①\": ①}, {\"key②\": ②}]
元组有点特别,因为它们可以分别声明每个元素的类型:
from typing import Tuplemy_data: Tuple[str, int, float] = (\"Adam\", ①⓪ · ⑤.⑦)
您还可以通过将其分配给新名称,为复杂类型创建别名:
from typing import List, TupleLatLngVector = List[Tuple[float, float]]points: LatLngVector = [ (②⑤.⑨①③⑦⑤ · -⑥⓪.①⑤⑤⓪③), (-①①.⓪①⑨⑧③ · -①⑥⑥.④⑧④⑦⑦), (-①①.⓪①⑨⑧③ · -①⑥⑥.④⑧④⑦⑦)]
有时您的Python函数可能足够灵活,可以处理几种不同的类型或任何数据类型。你可以使用Union类型以声明可以接受多种类型的功能,并可以使用Any接受任何东西。 Python ③.⑥还支持您可能在其他编程语言(如通用类型和自定义用户定义类型)中看到的①些奇特的静态类型。
编后语:关于《mfc中CString如何转化为const char*类型?为什么样像 Java、C、C++ 这样的静态语言会比 Python、Ruby 这样的动态语言流行得多》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《尼康发布的Df咋样?你的第一部拍摄设备是什么样》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器