指针无法传递问题
char *Spiffs::wifi_read_account(void)
{
File file;
file = SPIFFS.open("/account.txt", FILE_READ);
if (file)
{
char account2[]="1234";
char account[]="";
int index=0;
while (file.available())
{
account[index]=(char)file.read();
index++;
}
file.close();
return account2;
}
}
char *Spiffs::wifi_read_password(void)
{
File file;
file = SPIFFS.open("/password.txt", FILE_READ);
if (file)
{
char password[]="";
int index=0;
while (file.available())
{
password[index]=(char)file.read();
index++;
}
file.close();
return password;
}
}
指针传递,数组会被释放内存,而指针不会。
- 函数中不能返回局部变量,因为在c中这些局部变量都是存储在栈中的,随着他们的作用域的消失而消失,局部变量的指针也是局部变量。
- 如果我们要返回一个局部变量的指针,有两种方法,
- 一、把这个指针声明为static。(更正,只要被声明为static就都会在整个程序中一直存在。)
- 二、自己为这个指针所指的内容申请空间,这样的话只要自己没有释放这个变量,这个变量在整个程序的运行过程中就会一直存在。
#include <stdio.h>
#include <iostream>
using namespace std;
void wifi_read(char** password)
{
static char str[] = "1234";
*password = (char*)str;
cout << *password;
cout << "\r\n";
}
int main()
{
char* password = NULL;
wifi_read(&password);
cout << password;
return 0;
}
定义对象时,内存分配问题。
char str = 'A';
string password1=NULL;
string password2 = "";
string password3;
for (int i = 0; i < 5; i++)
{
password2 += str;
}
cout << password2;
指针的引用
void wifi_read(char *& password)
{
password = (char*)"123";
}
int main()
{
char *password;
wifi_read(password);
cout << password;
}
正确的使用
void wifi_read(char*& password)
{
static char password_temp[20];
char source = 'A';
int index = 0;
for (int i = 0; i < 20; i++)
{
password_temp[index] += source;
index++;
}
password = password_temp;
}
int main()
{
char* password;
wifi_read(password);
cout << password;
}
优化,减少代码量
void wifi_read(char *& password)
{
char source = 'A';
static string password_temp;
for (int i = 0; i < 30; i++)
{
password_temp += source;
}
password = (char*)password_temp.data();
}
int main()
{
char *password;
wifi_read(password);
cout << password;
}