草庐IT

c++ - strcat 两次添加第二个参数

classVars{public:char*appData=getenv("AppData");stringdatadir=strcat(appData,"\\Bob");};cout输出"C:\Users\Adam\AppData\Roaming\Bob\Bob"而不是“C:\Users\Adam\AppData\Roaming\Bob”它总是将第二个参数添加两次。怎么会? 最佳答案 “本函数返回的指针指向的字符串不得被程序修改。”像您一样更改值(通过strcat)会导致不可预测的行为。解决方案是简单地将不可变的给定字符串复制到s

C内存题

charbuffer[10];strcat(buffer,"hi");printf("%s",buffer);在上面的代码中,它打印了一些奇怪的符号或数字,后跟“hi”,我知道strcat正在附加到缓冲区。我通常将缓冲区中的内存归零。但我很好奇为什么我通常必须这样做。如果我在没有strcat的情况下执行printf("%i",buffer);,它只会打印一个随机数。那个数字是多少?在我填充任何东西之前,任何人都可以解释或链接到解释缓冲区中内容的tut吗? 最佳答案 “缓冲区”是堆栈上的一个10字节区域,它包含最后写入该内存区域的所有

c++ - 如何复制或连接两个字符 *

如何将char*连接或复制在一起?char*totalLine;constchar*line1="hello";constchar*line2="world";strcpy(totalLine,line1);strcat(totalLine,line2);此代码会产生错误!segmentationfault我猜我需要为totalLine分配内存?还有一个问题,下面是复制内存还是复制数据?char*totalLine;constchar*line1="hello";totalLine=line1;提前致谢!:) 最佳答案 Iwould

c++ - 令人惊讶的基准测试结果

看完泰特斯·温特斯的"LiveatHead"谈话,他提到StrCat()是人们最喜欢的功能之一,我决定尝试实现类似的东西,看看我是否可以击败std::string::append(或operator+,我认为它在内部使用append)运行时性能。我的理由是,作为可变参数模板实现的strcat()函数将能够确定其所有类似字符串的参数的组合大小,并进行一次分配以存储最终结果,而不必在以下情况下不断重新分配operator+,它不知道调用它的总体上下文。但是,当我在quick-bench上将我的自定义实现与operator+进行比较时,我发现我的strcat()实现比使用-std=c++17

c++ - 如果覆盖 char 数组的边界,为什么 strcat_s 会崩溃?

我知道,已经有很多关于这个主题的帖子,但我没有找到任何令人满意的帖子。连谷歌都不是我的friend。所以,首先是我的代码:voidsecureCat(){constintBUFFERSIZE=5;charbuffer[BUFFERSIZE];strcpy_s(buffer,BUFFERSIZE,"01");cout我在带有MSVS2010的Windows上玩过这段代码,遇到了以下问题:strcat_s的第一次调用工作正常,这对我来说很清楚,因为新字符串的大小("01"+"2"+NUL字符)小于缓冲区大小。但是,当超过缓冲区大小时,为什么第二个调用会崩溃?据我了解MSDN,我应该得到一个

c++ - 为什么 “strcat” 被认为是 “unsafe” ?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhydoesMSVC++consider“std::strcat”tobe“unsafe”?(C++)这是我的代码:charsentence[100]="";char*article[5]={"the","a","one","some","any"};lexeme=rand()%4;//randomlexemestrcat(sentence,article[lexeme]);strcat(sentence,"");在MSVC++中调试时,它会给我这些警告消息:Warning1warningC4996:'st

c++ - strcat 目标数组的大小

采用以下程序:#include#includeusingnamespacestd;intmain(){chara[8]="Hello,";charb[7]="world!";strcat(a,b);cout注意a和b具有与其分配的字符串相同的大小。documentation表示对于strcat(a,b)上类,a需要足够大以包含连接的结果字符串。尽管如此,cout显示器"Hello,world!".我是否进入了未定义的行为? 最佳答案 "AmIenteringundefinedbehavior?"是的。a[]末尾的区域已被覆盖。这次成

C++:strcat() 是否覆盖或移动 null?

现在让我们看看这个小程序chars[20]="One";strcat(s,"Two");cout这里起初s的值为“One”,对于视觉表示,这是s的值:O-n-e-\0然后我将“Two”添加到生成此字符串的末尾:O-n-e-T-w-o-\0现在您可以看到字符串中唯一的空值最初是在“One”之后,现在是在“OneTwo”之后我的问题是:null是否被字符串“Two”覆盖,然后在末尾添加它自己的null。或者是已经在开头的null又移回了末尾?(这个问题可能看起来没什么区别,但我想知道我学到的一切)谢谢 最佳答案 第一个\0被覆盖,并在连

C语言中strcat()函数的使用详解

1、strcat函数的各个参数介绍char*strcat(char*destination,constchar*source)①函数名为strcat②返回值类型为char*,是目标空间的起始地址③函数的参数,第一个是目标空间的起始地址,第二个是源字符串的起始地址。2、strcat函数的作用strcat函数是在一个字符串后面追加一个字符串,也就是将两个字符串拼接起来。3、strcat函数的细节分析①strcat会从目标空间字符串的第一个'\0'处开始追加字符串,且追加字符串时会将第一个'0'给覆盖掉。②目标空间必须足够大,且可以进行修改。③目标空间必须得有'\0'④源字符串中必须也得有'\0',

c++ - 如何从三个整数(或者可能是一个 git/SVN commit/rev.string)生成一个 constexpr 版本字符串?

说我有constexprconststd::uint8_tmajor=1;constexprconststd::uint8_tminor=10;constexprconststd::uint8_tbugfix=0;我要constexprconstchar*version_string(){...}在此示例中要返回等效于"1.10.0",我该怎么做?我假设我需要这两个,在constexpr中:整数到字符串的转换字符串连接这个问题纯粹是学术性的,除了“这是可能的”之外,我认为实际上拥有它constexpr几乎没有用处。我只是看不出结果如何。我愿意接受适用于GCC4.9和Clang3.4/3