Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ strcat()中的奇怪返回行为_C++_String_Strcat - Fatal编程技术网

C++ strcat()中的奇怪返回行为

C++ strcat()中的奇怪返回行为,c++,string,strcat,C++,String,Strcat,对我来说很奇怪,当我调用mystrcat时,我没有分配给char*仍然没有编译器的抱怨。我错过了什么?后续可以使用void return type优化我的代码,前提是声明了的字符串start\u的长度仅足以容纳初始化时使用的字符串。因此,尝试向其追加时会写入超过数组末尾的内容。这引起了人们的注意 您需要使数组足够大以容纳连接的字符串 char* mystrcat(char* to, const char* from) { while (*to) to++; while (*fro

对我来说很奇怪,当我调用mystrcat时,我没有分配给char*仍然没有编译器的抱怨。我错过了什么?后续可以使用void return type优化我的代码,前提是

声明了的字符串
start\u的长度仅足以容纳初始化时使用的字符串。因此,尝试向其追加时会写入超过数组末尾的内容。这引起了人们的注意

您需要使数组足够大以容纳连接的字符串

char* mystrcat(char* to, const char* from) {
    while (*to) to++;
    while (*from) *to++ = *from++;
    *to = '\0';
    return to;
}

如果从C中的函数返回,则不必总是将返回值赋给某个变量。其他函数如
printf
scanf
也会返回值,但如果调用时未将其赋给某个变量,则它们不必给出任何错误

另外,作为补充说明,您的
mystrcat
函数正在未定义的行为上运行。您将向它传递两个字符数组,并在第一个字符数组本身没有任何进一步的空间分配时将其追加。所以,你应该改变它

您应该声明要传递给函数的第一个参数的char数组足够长,以便能够在连接后保存数据。您可以按如下方式更改程序-

char start_of[50] = "going to add ";
void mystrcat(char*to,const char*from){
而(*to)to++;
而(*从)*到+=*从++;
*to='\0';
}
int main(){
char addthis[]=“句子的其余部分”;
[100]的char start_=“要添加”;
mystrcat(开始,添加此项);

您不能在第一个字符串中没有空间连接到。这不是C。您要附加到[]的
start\u
没有为额外数据分配空间。未定义的行为。如果我不想硬编码任何特定值,并使其保持尽可能多的空间,该怎么办。有办法吗?是的,使用
std::string
。谢谢。但如果我不想使硬编码值像50,该怎么办?@eagleye:如果你不想要硬编码值,那么en您不能将其存储在本地阵列中(除非您希望使用特定于平台的扩展,例如)您必须使用动态内存分配,例如,用于C风格的内存分配或C++风格的内存分配。您也可以使用某种C++容器,例如<代码> STD::String < /代码>。正如我上面所说的,如果我不想硬编码“100”,并保持它的开放空间,那该怎么办?C++方式是使用<代码> STD::String < /C>。
char start_of[50] = "going to add ";
void mystrcat(char* to, const char* from) {
    while (*to) to++;
    while (*from) *to++ = *from++;
    *to = '\0';
}

int main() {
    char addthis[]= "rest of the sentence";
    char start_of[100] = "going to add ";


    mystrcat(start_of, addthis);

    cout << "after strcat(): " << start_of<< endl;
}