gpt4 book ai didi

c++ - 不能将指针作为参数传递给另一个函数

转载 作者:行者123 更新时间:2023-11-28 00:25:55 25 4
gpt4 key购买 nike

我想用指针存储一个函数生成的char数组,然后把它作为参数传递给另一个函数,代码如下:

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);
}

randString() 函数返回一个由 6 个随机字母和数字组成的字符串,然后我用 *a 存储它。当我用调试跟踪指针时,我发现 *a 的内容是正确的,有一些像“VG5GH2”的东西。但是,当它被传递给 Print() 函数时,指针的内容丢失了。即使内存地址仍然相同,其中的值也变成了一些完全随机的东西。如果我执行 Print(randString()) 也会发生同样的事情。有人可以帮我解决这个问题吗?我是 C++ 的新手,对指针的使用还不是很清楚。非常感谢

最佳答案

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

char *rString;
rString = new char[6];

最后,应该删除在堆上创建的变量!您可以通过删除从函数中接收字符串的 char 指针来实现

char* randString();

作为

delete []a; 

在程序结束时。

关于c++ - 不能将指针作为参数传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com