C++ c++;从char*函数返回char数组的奇怪行为

C++ c++;从char*函数返回char数组的奇怪行为,c++,arrays,winapi,pointers,C++,Arrays,Winapi,Pointers,如何在不使用char和char*数组的情况下使用windows api。我只想使用字符串 第二个问题 char * nextdir(char * cstr) { string mystring(cstr); mystring.erase(mystring.find("*.*\\"),4); mystring.append("\\*.*"); char nextdiir[MAX_PATH]="0"; strncpy( nextdiir, mystring.c_str(), sizeof( m

如何在不使用char和char*数组的情况下使用windows api。我只想使用字符串

第二个问题

 char * nextdir(char * cstr) {


string mystring(cstr);
mystring.erase(mystring.find("*.*\\"),4);
mystring.append("\\*.*");
char nextdiir[MAX_PATH]="0";
strncpy( nextdiir, mystring.c_str(), sizeof( mystring ) );
cout<<"NEXTDIIR function="<<nextdiir<<endl;
return nextdiir; //}
所以我举个例子

NEXTDIIR function=c:\windows\*.*
searchdir=garbage
//garbage is unknown characters!
如何修复它

还有问题

1) 是因为我将char数组名强制转换为
char*

2) 如何在没有此字符和
char*
mess的情况下使用windows api。只使用字符串? 3) char数组和char*之间有什么区别?char数组名也是指向第一个元素的常量指针,那么有什么区别??? 4) 如何从c中的函数返回字符数组?在C++中? 5)
char*
const char*
之间有什么区别?它们都是相同的,因为所指向的值是不变的


请提供帮助

您正在返回指向局部变量的指针
nextdir
。当函数返回时,该变量不再存在,留下一个悬空指针。取消引用是未定义的行为

为什么不返回一个
std::string
?然后使用
std::string::c_str()
方法获取指向其底层数据的
const char*
指针

std::string nextdir(const char * cstr) {
  string mystring(cstr);
  // do your stuff
  return mystring;
}
很多问题

如何在不使用char和char*数组的情况下使用windows api。我只想使用字符串

这将很困难,WinAPI要求某些函数有一个指向char*数组的指针,您可以在这里使用
std::vector vec(必需的大小)
&vec[0]
传递给api函数,并将
&vec[0]
分配给
std::string
以将结果输入
std::string

第二个问题

 char * nextdir(char * cstr) {


string mystring(cstr);
mystring.erase(mystring.find("*.*\\"),4);
mystring.append("\\*.*");
char nextdiir[MAX_PATH]="0";
strncpy( nextdiir, mystring.c_str(), sizeof( mystring ) );
cout<<"NEXTDIIR function="<<nextdiir<<endl;
return nextdiir; //}
是函数的本地指针,因此不允许您返回其指针(它将是UB)。您可以如上所述,首先创建
std::vector
并根据需要修改它,然后将结果作为
std::string(&vec[0])
返回

还有问题

1) 是因为我将char数组名强制转换为char*

不确定演员阵容在哪里,但你有如上所述的UB

2) 如何在没有此字符和字符*混乱的情况下使用windows api

MFC
CString
允许您使用GetBuffer(0)或GetBufferSetLength(100)访问内部缓冲区。string不允许您安全地修改内部缓冲区,这就是为什么最好使用std::vector。实际上,
std::vector
会更好,以防您使用UNICODE构建,其中TCHAR将是wchar\t

3) char数组和char*之间有什么区别

两者都指向char类型的数组,所以差别不大

char数组名也是指向第一个元素的常量指针,那么有什么区别

如果是
const char*nm=“阿拉巴马”然后它说您不能修改nm数组内容

4) 如何从c中的函数返回字符数组?在C++中? 为了安全地返回char数组,您应该确保它的生存期长于函数的生存期。这意味着您必须在函数内部分配内存,或者将已经分配的内存传递给您的函数

5) char*和const char*之间有什么区别?它们都是相同的,因为所指向的值是不变的


char*
是一个可以在代码中修改的char类型数组,
const char*
是一个只能读取的char类型数组。

foo只是一个在前面声明的数组,它包含一些默认路径。因为我需要使用FindFirstFile,第一个参数是char array help,用于传递
std::string::c_str()的结果
查找文件应该可以正常工作。
std::string nextdir(const char * cstr) {
  string mystring(cstr);
  // do your stuff
  return mystring;
}
char nextdiir[MAX_PATH]="0";