Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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++ 无法正确传递字符数组_C++_C_Xcode_Macos_Char - Fatal编程技术网

C++ 无法正确传递字符数组

C++ 无法正确传递字符数组,c++,c,xcode,macos,char,C++,C,Xcode,Macos,Char,一个函数试图将字符数组传递给另一个函数,但没有成功: char * ret() { char buf[32]; buf[0]='1'; // buf char array contains 1 buf[31]='\0'; printf(buf); return buf; } int multiline() { char temp[32]; strcpy(temp,ret()); // temp array doesn't contain

一个函数试图将字符数组传递给另一个函数,但没有成功:

char * ret() {
    char buf[32];
    buf[0]='1'; // buf char array contains 1
    buf[31]='\0';
    printf(buf);
    return buf;
}

int multiline() {
    char temp[32];
    strcpy(temp,ret()); // temp array doesn't contain 1 after this line
    temp[31]='\0'; 
    printf(temp);
}

请告诉我,如何解决此问题?

您正在返回指向局部变量char buf[32]的指针。此数组在堆栈上分配,仅在函数内有效,在函数外无效。 当您访问此数组时,会出现未定义的行为


要返回这样的数组,您应该在堆上分配它,例如使用
malloc()

返回一个指向局部变量char buf[32]的指针。此数组在堆栈上分配,仅在函数内有效,在函数外无效。 当您访问此数组时,会出现未定义的行为


要返回这样的数组,您应该在堆上分配它,例如使用
malloc()

您不能返回指向局部变量的指针;一旦函数返回,局部变量以及函数堆栈帧的其余部分将被销毁

相反,您可以返回数组的副本;您可以使用
strdup()
制作一个


另一方面,您正在设置数组的第一个字符,并在末尾添加一个\0,但中间的30个字符只包含垃圾。通常,字符串末尾的\0紧跟在有效字符之后,而不是一直在数组末尾。

不能返回指向局部变量的指针;一旦函数返回,局部变量以及函数堆栈帧的其余部分将被销毁

相反,您可以返回数组的副本;您可以使用
strdup()
制作一个


另一方面,您正在设置数组的第一个字符,并在末尾添加一个\0,但中间的30个字符只包含垃圾。通常,字符串末尾的\0紧跟在有效字符之后,而不是一直在数组末尾。

您可以通过不返回局部变量(分配字符串或返回指向静态分配的字符串的指针)来解决此问题:


您可以通过不返回局部变量(分配字符串或返回指向静态分配变量的指针)来解决此问题:


您正在返回一个局部变量为什么希望它有1?您认为这段代码有什么问题还不清楚。您能再详细说明一下吗?我想将buf数组(由ret()函数返回)复制到temp数组中。您返回的本地变量可能是重复的。为什么希望它有1?您认为这段代码有什么问题还不清楚。您能详细说明一下吗?我想将buf数组(由ret()函数返回)复制到temp数组中。正确行的可能副本是:
char*buf=(char*)malloc(32*sizeof(char))char*buf=(char*)malloc(32*sizeof(char))char * ret() {
    char * buf = malloc(32*sizeof(char));
    buf[0]='1'; // buf char array contains 1
    buf[31]='\0';
    printf(buf);
    return buf;
}

int multiline() {
    char temp[32];
    char * returnedString = ret();
    strcpy(temp,returnedString);
    free(returnedString);
    temp[31]='\0'; 
    printf(temp);
}