草庐IT

months3char

全部标签

c++ - 为什么 C++ 在将 float 转换为 char 时不显示缩小转换错误?

使用g++-std=c++17-Wall-pedanticmain.cpp编译此代码不会产生任何警告:#include#includeintmain(intargc,charconst*argv[]){for(inti=0;i它不应该产生缩小误差吗? 最佳答案 我做了一些研究,发现-Wall不会警告类型转换问题。相反,使用标志-Wconversion以获得有关潜在类型转换问题的警告。备注:对于VC++的用户,/W4会在类型转换时警告你可能丢失数据 关于c++-为什么C++在将float转

java - 必须在 GetStringUTFChars 之后调用 ReleaseStringUTFChars(将 char* 传递给 C 函数时)?

我对从java传递给c的对象有点困惑?应该在nativejni方法中删除它们,还是在方法返回时将它们作为垃圾回收。例如:如果我的java文件中有一个本地声明publicnativeprintString(Stringmsg);并且本地方法正在使用constchar*message=(jni_env)->GetStringUTFChars(msg,&iscopy);获取字符串的c风格字符数组。我是否应该在native方法中完成所有操作后调用(jni_env)->ReleaseStringUTFChars(msg,message);。如果是,那为什么有必要?为什么java运行时环境不代表程

c++ - 编写跨平台代码时使用 char* 而不是 void* 有什么陷阱吗?

使用char*编写进行内存访问的跨平台代码时有什么陷阱吗?更新:例如,我是否应该在将取消引用的char*转换为特定类型(例如int)之前检查地址是否与该类型的大小对齐?某些架构会在未对齐访问时返回奇怪的结果吗?我正在研究游戏内存分配器,以更好地理解如何调试内存问题。我开始相信char*更可取,因为它能够进行指针运算并通过void*取消引用它们,这是真的吗?以下假设是否始终适用于不同的通用平台?sizeof(char)==1sizeof(char*)==sizeof(void*)sizeof(char*)==sizeof(size_t) 最佳答案

c++ - 接口(interface)设计: safety of overloaded function taking string and char array

假设我们有一个类可以写入输出内容classWriter{public:intwrite(conststd::string&str);intwrite(constchar*str,intlen);//...};我对这个、它的灵active以及所有这些都很好,直到我意识到char*buf=newchar[n];//notterminatedwith'\0'//loadupbufWriterw;w.write(buf);//compiles!那是一个真的讨厌的错误。我们可以通过一些模板进行一些修改classWriterV2{public:intwrite(conststd::string&s

c++ - 使用 const char * literal 作为 std::map 键是否安全?

我有类,每个类都返回它的名字structIFoo{virtualconstchar*GetName()const=0;}structFoo:IFoo{constchar*GetName()const{return"Foo";}}structBar:IFoo{constchar*GetName()const{return"Bar";}}还有别的地方:Foo*a=newFoo();Foo*b=newFoo();std::mapdata;data[a->GetName()]=0;printf("%i",data[b->GetName()]);字符串文字应该存储在内存中的一个地方,但它是100

c++ - 如何将单字节 const char* 转换为 UTF-8 编码

我有一个函数,它要求我传递一个由char*指向的UTF-8字符串,并且我有一个指向单字节字符串的char指针。如何在C++中将字符串转换为UTF-8编码?我可以使用任何代码来执行此操作吗?谢谢! 最佳答案 假设是Linux,您正在寻找iconv.当您打开转换器(iconv_open)时,您将传递from和to编码。如果您将空字符串作为from传递,它将从您系统上使用的应该与文件系统匹配的语言环境转换而来。在Windows上,您与MultiByteToWideChar几乎相同您将CP_ACP作为代码页传递的位置。但在Windows上,

c++ - 将 unsigned char * 转换为 char *

这是我的代码:std::vectordata;...//putsomedatatodatavectorchar*bytes=reinterpret_cast(imageData.data());我的问题是,在vector“数据”中,我有值为255的字符。在字节指针中转换后,我的值为-1而不是255。我应该如何正确转换此数据?编辑好吧,我真的不需要转换,只需要位序。感谢您尝试帮助 最佳答案 char可以是有符号的或无符号的,具体取决于平台。如果它已签名,就像在您的平台上一样,它的保证范围是从-128到127的标准。对于常见平台,它是一

c++ - 用 const char*const 解释 constexpr

这个问题在这里已经有了答案:What'sthedifferencebetweenconstexprandconst?(10个答案)关闭7年前。我有以下代码:staticconstexprconstchar*constmyString="myString";能否请您解释一下与以下内容的区别:staticconstchar*constmyString="myString";在这种情况下,constexpr有什么新内容?

c++ - 如何获取 char 数组中元素的地址?

我有一个char数组,我需要获取每个元素的地址。cout给我一​​个有效地址,但是如果我试图获取特定元素的地址,它会吐出垃圾:cout 最佳答案 std::coutoperator重载了对于char*,它会尝试打印它认为您的指针指向第一个字符的以nul结尾的字符串。但并非所有char数组都是以nul结尾的字符串,因此是垃圾。 关于c++-如何获取char数组中元素的地址?,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - "char[]"是正确的类型吗?

昨天,我惊讶地发现一些代码似乎将char[]视为一种类型:typedefstd::unique_ptrCharPtr;以前,我会这样写:typedefstd::unique_ptrCharPtr;//CustomdefinitionofCharDeleteromitted经过一些研究,我发现char[]语法是有效的,因为std::unique_ptr提供了一个模板专门化来处理数组(例如,它会自动调用delete[]用于数组而不需要自定义删除器)但是char[]在C++中究竟意味着什么?我见过这样的语法:constchara[]="Constantstring";//Example1ch