C++ 无法将指针作为参数传递给其他函数

C++ 无法将指针作为参数传递给其他函数,c++,pointers,C++,Pointers,我想使用指针存储函数生成的字符数组,然后将其作为参数传递给另一个函数,代码如下所示: char* randString(){ //generate a rand string formed by 6 letters and numbers char rSet[36];//a char set contains 0-9 and A-Z for (int i=0;i<10;i++) rSet[i]=i+48;// get ASCII of 0-9 for (in

我想使用指针存储函数生成的字符数组,然后将其作为参数传递给另一个函数,代码如下所示:

char* randString(){
    //generate a rand string formed by 6 letters and numbers
    char rSet[36];//a char set contains 0-9 and A-Z
    for (int i=0;i<10;i++) rSet[i]=i+48;// get ASCII of 0-9
    for (int i=10;i<36;i++) rSet[i]=i+55;// get ASCII of A-Z

    char rString[7];
    for (int i=0;i<6;i++){
        int ind=rand()%36;
        rString[i]=rSet[ind];// generate the random string
    }
    rString[6]='\0';
    return rString;
 }
void Print(char *b){
    cout<<b;
}
int main(int argc, char* argv[])
{
    char* a=randString();
    Print(a);
}
char*randString(){
//生成由6个字母和数字组成的rand字符串
char-rSet[36];//字符集包含0-9和a-Z

对于(int i=0;i内存问题伙伴,您只需返回随机字符串的第一个字符,其他字符在函数完成其工作时会被销毁。但是,如果您使用“new”关键字创建它们,则可以执行任何您想要的操作。我希望这会有所帮助

char* randString(){
    //generate a rand string formed by 6 letters and numbers
    char rSet[36];//a char set contains 0-9 and A-Z
    for (int i=0;i<10;i++) rSet[i]=i+48;// get ASCII of 0-9
    for (int i=10;i<36;i++) rSet[i]=i+55;// get ASCII of A-Z
    srand(time(nullptr));

    char *rString=new char[7];
    for (int i=0;i<6;i++){
        int ind=rand()%36;
        rString[i]=rSet[ind];// generate the random string
    }
    rString[6]='\0';
    return rString;
}
void Print(char *b){
     cout<<b;
}

int main()
{
     char *a=randString();
     Print(a);
     delete[] a;
     return 0;
}
char*randString(){
//生成由6个字母和数字组成的rand字符串
char-rSet[36];//字符集包含0-9和a-Z

对于(int i=0;i内存问题伙伴,您只需返回随机字符串的第一个字符,其他字符在函数完成其工作时会被销毁。但是,如果您使用“new”关键字创建它们,则可以执行任何您想要的操作。我希望这会有所帮助

char* randString(){
    //generate a rand string formed by 6 letters and numbers
    char rSet[36];//a char set contains 0-9 and A-Z
    for (int i=0;i<10;i++) rSet[i]=i+48;// get ASCII of 0-9
    for (int i=10;i<36;i++) rSet[i]=i+55;// get ASCII of A-Z
    srand(time(nullptr));

    char *rString=new char[7];
    for (int i=0;i<6;i++){
        int ind=rand()%36;
        rString[i]=rSet[ind];// generate the random string
    }
    rString[6]='\0';
    return rString;
}
void Print(char *b){
     cout<<b;
}

int main()
{
     char *a=randString();
     Print(a);
     delete[] a;
     return 0;
}
char*randString(){
//生成由6个字母和数字组成的rand字符串
char-rSet[36];//字符集包含0-9和a-Z

对于(int i=0;i内存问题伙伴,您只需返回随机字符串的第一个字符,其他字符在函数完成其工作时会被销毁。但是,如果您使用“new”关键字创建它们,则可以执行任何您想要的操作。我希望这会有所帮助

char* randString(){
    //generate a rand string formed by 6 letters and numbers
    char rSet[36];//a char set contains 0-9 and A-Z
    for (int i=0;i<10;i++) rSet[i]=i+48;// get ASCII of 0-9
    for (int i=10;i<36;i++) rSet[i]=i+55;// get ASCII of A-Z
    srand(time(nullptr));

    char *rString=new char[7];
    for (int i=0;i<6;i++){
        int ind=rand()%36;
        rString[i]=rSet[ind];// generate the random string
    }
    rString[6]='\0';
    return rString;
}
void Print(char *b){
     cout<<b;
}

int main()
{
     char *a=randString();
     Print(a);
     delete[] a;
     return 0;
}
char*randString(){
//生成由6个字母和数字组成的rand字符串
char-rSet[36];//字符集包含0-9和a-Z

对于(int i=0;i内存问题伙伴,您只需返回随机字符串的第一个字符,其他字符在函数完成其工作时会被销毁。但是,如果您使用“new”关键字创建它们,则可以执行任何您想要的操作。我希望这会有所帮助

char* randString(){
    //generate a rand string formed by 6 letters and numbers
    char rSet[36];//a char set contains 0-9 and A-Z
    for (int i=0;i<10;i++) rSet[i]=i+48;// get ASCII of 0-9
    for (int i=10;i<36;i++) rSet[i]=i+55;// get ASCII of A-Z
    srand(time(nullptr));

    char *rString=new char[7];
    for (int i=0;i<6;i++){
        int ind=rand()%36;
        rString[i]=rSet[ind];// generate the random string
    }
    rString[6]='\0';
    return rString;
}
void Print(char *b){
     cout<<b;
}

int main()
{
     char *a=randString();
     Print(a);
     delete[] a;
     return 0;
}
char*randString(){
//生成由6个字母和数字组成的rand字符串
char-rSet[36];//字符集包含0-9和a-Z

对于(int i=0;i当您创建字符数组时,它是在本地范围内创建的,不能在创建它的函数之外使用。要解决此问题,在同一代码中可以做的最好方法是在堆上创建字符数组。这将提供您想要得到的确切结果

char *rString;
rString = new char[6];
最后,应该删除在heap!上创建的变量,您可以通过删除从函数接收字符串的char指针来完成

char* randString();
作为


在程序结束时。

创建字符数组时,它是在本地范围内创建的,不能在创建它的函数之外使用。要解决此问题,在同一代码中可以做的最好方法是在堆上创建字符数组。这将为您提供想要得到的确切结果

char *rString;
rString = new char[6];
最后,应该删除在heap!上创建的变量,您可以通过删除从函数接收字符串的char指针来完成

char* randString();
作为


在程序结束时。

创建字符数组时,它是在本地范围内创建的,不能在创建它的函数之外使用。要解决此问题,在同一代码中可以做的最好方法是在堆上创建字符数组。这将为您提供想要得到的确切结果

char *rString;
rString = new char[6];
最后,应该删除在heap!上创建的变量,您可以通过删除从函数接收字符串的char指针来完成

char* randString();
作为


在程序结束时。

创建字符数组时,它是在本地范围内创建的,不能在创建它的函数之外使用。要解决此问题,在同一代码中可以做的最好方法是在堆上创建字符数组。这将为您提供想要得到的确切结果

char *rString;
rString = new char[6];
最后,应该删除在heap!上创建的变量,您可以通过删除从函数接收字符串的char指针来完成

char* randString();
作为


在程序结束时。

返回一个指向函数内部局部变量的指针。您引用的是堆栈内存-一旦方法/函数退出,其他函数、变量将使用堆栈内存

这里的一个答案提到了“悬空指针”。只有当您
malloc()
然后
free()
并重新使用指针时,该术语才适用

int *i = (int *) malloc(sizeof(int));
*i = 12;
free(i); // oops
printf("i = %d\n", *i);
如果要编写返回字符串的函数(
char*
),有两个选项:

  • 在函数中分配内存,然后返回
  • 作为参数之一,需要获取输出缓冲区和输出缓冲区大小
  • <> L> >强> >在C++中使用代码>使用代码> STD::String < /代码>无处不在,不要使用<代码> char */COD>所有< <强> >(请注意,输出仍然有一个内存副本……可能通过STD::String Outout参数作为参考,将有助于……)
    例1,注意我们如何调用函数,然后释放内存。内存管理是由函数完成的。这不是最佳的,我不建议这样做

    // in this function, the caller must release the memory
    char* randStr1(int len) {
       char* c = (char*) malloc(len), *cc = c;
       for (int i=0; i<len; i++) {
             *cc = rand()l
             *cc++;
       }
       return c;
    }
    
    void foo1() {
       char *c = randStr1(10);
       printf("%s", c);
       free(c);
    }
    

    请注意,在上一个示例中,我们不需要从堆中取消分配内存。编译器将从堆栈中分配和取消分配内存。

    您正在返回一个指向函数内部局部变量的指针。您正在引用堆栈内存-一旦方法/函数退出,其他函数、变量将使用堆栈内存。

    这里的一个答案提到了“悬空指针”。只有当您
    malloc()
    然后
    free()
    并重新使用指针时,该术语才适用

    int *i = (int *) malloc(sizeof(int));
    *i = 12;
    free(i); // oops
    printf("i = %d\n", *i);
    
    如果要编写返回字符串的函数(
    char*
    ),有两个选项:

  • 在函数中分配内存,然后返回
  • 作为参数之一,需要获取输出缓冲区和输出缓冲区大小
  • <> > >在C++中使用-<代码> STD::String ,并且不要使用<代码> char */COD>