草庐IT

str_bytes

全部标签

c++ - C++中c_str()的线程安全

我创建了一个类SettingsClass,它包含静态字符串,这些静态字符串包含MySQLC++连接器库要使用的数据库连接字符串(例如主机名、数据库名、用户名、密码)。每当函数需要连接到数据库时,它都会对这些静态字符串调用.c_str()函数。例如:ClassSettingsClass{public:staticstringhostname;...}SettingsClass;stringSettingsClass::hostname;//AfunctionthatneedstoconnecttotheDBuses:driver=get_griver_instance();driver-

c++ - str.clear() 和 str = ""之间的区别

我有一个C++std::stringstr,我已将其设置为某个字符串,现在想重置它以便再次使用它。调用str.clear()与调用str=""有区别吗?编辑。澄清一下:我通过向其附加一个char数组缓冲区来重用str:str.append(buf) 最佳答案 没有有效的区别。根据实现的不同,使用clear()可能比将char指针分配给零更快。但是,即使情况并非如此,也更喜欢更清楚地表达您的意图的方法。如果要清除字符串,请使用clear()。如果要分配空字符串,请使用=""。虽然我会注意到,但你说,“所以我可以再次使用它。”又用它干什

c++ - 'for(auto &str : vec)' 内部 for 循环的目的是什么?

我是C++的新手,正在尝试学习vector的概念。我在网上看到这段代码。我的问题是,'for(auto&str:vec)'中的内部for循环的目的是什么?为什么作者要对第一个引用(&str)创建第二个引用(&c)?intmain(){vectorvec;for(stringword;cin>>word;vec.push_back(word)){}for(auto&str:vec){for(auto&c:str){c=toupper(c);}}for(inti=0;i!=vec.size();++i){if(i!=0&&i%8==0)cout 最佳答案

MySQL 1071 - Specified key was too long; max key length is 1000 bytes解决方案

1071-Specifiedkeywastoolong;maxkeylengthis1000bytes解决方案在设计数据库表时,主键设计varchar长度为255,点击保存表,数据库报错如下图所示原因:在UTF-8MB4字符集下,每个字符通常需要4字节来存储。因此,如果你在VARCHAR(255)字段上使用UTF-8MB4字符集,它的最大存储长度将是255*4=1020字节,这已经超过MySQL的默认主键长度限制(1000字节)。在这种情况下,如果你尝试将VARCHAR(255)列作为主键并使用UTF-8MB4字符集,你可能会遇到“1071-Specifiedkeywastoolong;max

c++ - 如何使用类似 `std::basic_istream<std::byte>` 的东西

本题旨在使用std::byte具有标准输入输出。是否有任何计划为read(_bytes)添加适当的函数重载?和write(_bytes)到basic_istream的接口(interface)和basic_ostream在未来的标准?有什么理由反对它?我知道CharT*-应保留过载。我可以做什么来使用std::byte?我目前在我的项目功能中定义std::istream&read(std::istream&,std::byte*,std::streamsize)std::ostream&write(std::ostream&,conststd::byte*,std::streamsiz

c++ - `(c = *str) != 0` 是什么意思?

intequiv(char,char);intnmatches(char*str,charcomp){charc;intn=0;while((c=*str)!=0){if(equiv(c,comp)!=0)n++;str++;}return(n);}“(c=*str)!=0”到底是什么意思?有人可以向我解释一下或帮助我提供正确的术语以自己搜索解释吗? 最佳答案 这个表达式有两部分:c=*str-这是通过取消引用指针对c的简单赋值,val!=0-这是与零的比较。这是可行的,因为赋值是一个表达式,即它有一个值。赋值的值与被赋值的值相同,

c++ - 将 BYTE 数组转换为 unsigned long long int

我正在尝试将BYTE数组转换为等效的unsignedlonglongint值,但我的编码没有按预期工作。请帮助修复它或建议替代方法。额外信息:这4个字节组合成一个十六进制数,输出一个等效的十进制数。假设一个给定的byteArray={0x00,0xa8,0x4f,0x00},十六进制数是00a84f00,它等效的十进制数是11030272。#include#includetypedefunsignedcharBYTE;intmain(intargc,char*argv[]){BYTEbyteArray[4]={0x00,0x08,0x00,0x00};std::stringstr(re

c++ - x86-64 程序集 : why offset 25 bytes?

我今天开始学习x86汇编,通过分析与这个c++示例对应的汇编代码(我知道存在类似atoi的东西,但我想使示例保持最小):#includestd::vectorrange(intN){std::vectorv(N);for(unsignedinti=0;i如果使用g++-O0-S-fno-stack-protectorreturn_by_value.cpp进行编译,则会产生以下摘录:..._Z5rangei:.LFB509:.cfi_startproc.cfi_personality0x3,__gxx_personality_v0.cfi_lsda0x3,.LLSDA509pushq%r

c++ - std::string 的 strlen(str.c_str()) 和 str.length() 之间的区别

作为一种隐含的理解,我一直认为std::string的每一个实现必然必须满足strlen(str.c_str())==str.length()对于每个字符串str。C++标准对此有何规定?(是吗?)背景:至少VisualC++和gcc附带的实现没有这个属性。考虑这个例子(参见hereforaliveexample)://Output://stringsaysitslengthis:13//strlensays:5#include#include#includeintmain(){std::stringstr="Hello,world!";str[5]=0;std::cout当然,没有注

c++ - 除了使用 str.substr( ) 在给定位置提取子字符串之外,还有其他方法吗?

我正在尝试比较两个std::strings,并确定字符串A是否与字符串B相同,但插入或删除了单个字符。否则返回假。例如:“start”和“strt”或“ad”和“add”目前:if(((sizeA-sizeB)!=1)&&((sizeB-sizeA)!=1)){returnfalse;}if(sizeA这可以完美地工作,但是gprof告诉我这个功能陷入了困境。我尝试将for循环转换为使用迭代器来访问字符,但这使我的运行时间增加了一倍。我将它缩小到我对std::string.substr()的使用,因为每次stringA和stringB的大小相差1时它都会构造新的字符串。当第一个字符不同