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>