如何在不使用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; //}
下一个dir是一个数组!我怎么能从函数中返回它? 如果我把它投射到char *数组会发生什么?
我的问题是使用nextdir返回值的其他函数工作奇怪!
void recursive(char * searchdir){
cout<<"searchdir="<<searchdir<<endl;}
当我做的时候
recursive(nextdiir(foo)); //now the data printed is not the same but garbage! not like the data printed in call to nextdiir function!!
所以我得到了例如
NEXTDIIR function=c:\windows\*.*
searchdir=garbage
//garbage is unknown characters!
如何解决?
另一个问题!!
1)是因为我将char数组名称转换为char *
?
2)如何使用没有此char和char *
混乱的windows api。只能使用字符串?
3)char数组和char *
之间有什么区别? char数组名也是指向第一个元素的常量指针然后有什么区别???
4)如何从c中的函数返回char数组?在c ++中?
5)char *
和const char *
之间的差异是什么?它们都是相同的,因为指向的值是不可改变的!
请帮忙
答案 0 :(得分:2)
您正在返回指向局部变量nextdiir
的指针。当函数返回时,该变量不再存在,为您留下悬空指针。取消引用它是未定义的行为。
为什么不返回std::string
?然后使用std::string::c_str()
方法获取指向其基础数据的const char*
指针。
std::string nextdir(const char * cstr) {
string mystring(cstr);
// do your stuff
return mystring;
}
答案 1 :(得分:0)
很多问题......
如何在不使用char和char *数组的情况下使用windows api。我想只使用字符串。
这将很难,Win Api需要一些函数指向char *数组的指针,你可以在这里使用std::vector<char> vec(REQUIRED_SIZE);
传递&vec[0]
到你的api函数,并将&vec[0]
分配给你的std::string
将结果导入std::string
。
第二个问题
char nextdiir[MAX_PATH]="0";
是函数的本地函数,因此不允许返回其指针(它将是UB)。您可以按照上面的方式创建std::vector<char>
并根据需要进行修改,并将结果作为std::string(&vec[0])
返回。
另一个问题!!
1)是因为我将char数组名称转换为char *?
不知道该演员在哪里,但你有一个如上所述的UB。
2)如何使用没有此char和char * mess的windows api。
MFC CString
允许您使用GetBuffer(0)或GetBufferSetLength(100)访问内部缓冲区。 std :: string不允许你安全地修改内部缓冲区,这就是为什么最好使用std :: vector。实际上std::vector<TCHAR>
会更好,如果您使用UNICODE构建,其中TCHAR将是wchar_t。
3)char数组和char *有什么区别?
两者都指向char类型的数组,所以差别不大。
char数组名称也是指向第一个元素的常量指针然后有什么区别???
如果是const char* nm = "alabama";
则表示您无法修改nm数组内容
4)如何从c中的函数返回char数组?在c ++中?
要安全地返回一个char数组,你应该确保它的生命周期比你的函数生命周期长。这意味着您必须在函数内部分配内存,或者将已分配的内存传递给您的函数。
5)char *和const char *之间的差异是什么?它们都是相同的,因为指向的值是不可改变的!
char*
是一个char类型的数组,可以在代码中修改,const char*
是一个只能读取的char类型数组。