C++ c++;从char*函数返回char数组的奇怪行为
如何在不使用char和char*数组的情况下使用windows api。我只想使用字符串 第二个问题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 * 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
MFCCString
允许您使用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";