草庐IT

CHAR_LENGTH

全部标签

c++ - 如何将 char* 浅复制到 std::string?

我想知道是否可以将char*浅复制到std::string。 最佳答案 如果您的目标是在不复制数据的情况下使用char*构造一个std::string对象:不,这是不可能的。std::string拥有它的资源,它不能引用另一个char*。这也是为什么适当的构造函数采用constchar*而不是char*的原因:它不修改数据,而是复制数据。在C++17中,您有std::string_view,它恰好用于引用它不拥有的字符串(文字)。请注意,此View并非旨在修改数据,因此它再次使用constchar*而不是char*构造。

c++ - 如何避免在 C++ 中从字符串常量到 'char*' 的弃用转换

我想在C++中调用以下代码,我无法更改它:voidgetAge(char*name){//dosomething}当我用getAge("hello");调用它时,它有以下警告:warning:deprecatedconversionfromstringconstantto'char*'但是C代码中没有警告。有什么区别,如何更改调用以避免C++中的警告? 最佳答案 thefunction[…]cannotbechanged然后围绕该函数编写一个包装器并复制该字符串——或者,如果您感到幸运(=您知道该字符串不会在原始函数中被修改),显式

c++ - char* - 为什么指针中没有地址?

我有一个关于char*的基本问题我不明白char*aString="HelloStackoverflow";指针指向字符链的第一个字符。cout但是为什么整个字符串都保存在指针中呢?cout我希望有一个地址,地址不是保存在指针中吗?“HelloStackoverflow”的地址在哪里?非常感谢任何帮助 最佳答案 operator过载它输出从该指针开始的以null结尾的字符串,并且比运算符ostream::operator更受欢迎这将输出地址。如果你想要地址,把指针指向void*. 关于c

c++ - 为什么将 char 数组转换为 int 指针并使用指针写入它会使数据反转?

我创建了一些简单的代码来测试将char数组转换为int指针。正如我预期的那样工作正常,但是当我使用指针写入数组时,当我打印回c数组时,数据交换了MSBLSB。为什么会这样?这是操作系统相关的事情吗?#include"stdio.h"constintSIZE=12;int_tmain(intargc,_TCHAR*argv[]){unsignedcharc[SIZE]={1,2,3,4,5,6,7,8,9,10,11,12};unsignedint*ptr=(unsignedint*)c;inti;printf("Intsize=%d\n",sizeof(unsignedlong));f

c++ - 从 ‘const char*’ 到 ‘char’ 的无效转换

我正在尝试使用以下代码行将字符串中的某个字符替换为空格:str[i]="";如何在没有问题标题错误的情况下实现这一点? 最佳答案 使用单引号str[i]='';在C++中,标记""是一个字符串文字,表示两个字符的数组:字符集中的空格值(例如,ascii中的值32)和零.另一方面,标记''表示具有空格值(通常为32)的单个字符。请注意,在C语言中,标记''表示具有空格值的整数。(在C中,sizeof''==sizeof(int),而在C++中,sizeof''==sizeof(char)==1。)

c++ - std::string 或 std::vector<char> 保存原始数据

我希望这个问题适用于stackoverflow...将原始数据字节(8位)存储在std::string中有什么区别?而不是将它们存储在std::vector中.我正在从文件中读取二进制数据并将这些原始字节存储在std::string中.这很好用,这样做没有问题。我的程序按预期工作。但是,其他程序员更喜欢std::vector方法并建议我停止使用std::string因为它对原始字节不安全。所以我想知道为什么使用std::string可能不安全保存原始数据字节?我知道std::string最常用于存储ASCII文本,但是一个字节就是一个字节,所以我不明白std::vector的偏好.感谢

c++ - 如何将 float 转换为长度为 4 的字节数组(char* 数组)?

如何将float转换为长度为4的字节数组(char*数组)?我需要通过网络发送一些数据、tcp,并且需要将float作为字节数组发送。(我知道两位小数的精度,所以目前我在客户端乘以100,在服务器端除以100-基本上转换为整数,然后使用&0xff 最佳答案 将任何类型作为字节序列读取非常简单:floatf=0.5f;unsignedcharconst*p=reinterpret_cast(&f);for(std::size_ti=0;i!=sizeof(float);++i){std::printf("Thebyte#%zuis0x

c++ - 如何将 ASCII char 转换为其 ASCII int 值?

我想将一个字符转换成它的ASCII整数值。我可以用所有可能的值填充一个数组并与之比较,但我觉得这不对。我想要类似的东西charmychar="k"publicintASCItranslate(charc)returncASCItranslate(k)//>>Shouldreturn107asthatistheASCIIvalueof'k'.重点是atoi()在这里不起作用,因为它仅用于可读数字。它不会处理空格(ASCII32)。 最佳答案 只需这样做:int(k)这里只是将char直接转换为int,不需要函数调用。

c++ - 不允许从 'const char *' 到 'void *' 的 static_cast

在C++中,我试图打印C字符串的地址,但我的转换似乎存在一些问题。我从一本书中复制了代码,但它无法在我的Mac上编译。constchar*constword="hello";cout(word) 最佳答案 你正试图抛弃“常量”:word指向常量数据,但static_cast的结果不是指向常量数据的指针。static_cast不会让你那样做的。你应该使用static_cast相反。 关于c++-不允许从'constchar*'到'void*'的static_cast,我们在StackOve

c++ - 从 char* 缓冲区读取 int32_t 的惯用 cpp14 方法是什么?

给定一个包含int(小端)的字符缓冲区c。如何读作int32_t?我写了这段代码,但感觉不符合cpp的习惯。int32_tv;char*p=(char*)&v;for(inti=0;i 最佳答案 将binary数据从char*缓冲区复制到任何其他数据类型的唯一可移植方法是使用memcpy(或等效字节-copyingmerhodsuchasstd::copy或你自己的模仿这种行为的方法)。memcpy(&my_number,my_buffer,sizeof(my_number));当然,缓冲区应该包含给定数据类型的正确位。如果它源于在