字符数组末尾的一个额外字符(Char*Result=new Char)8OI 我有一个C++函数,它将LpSTR类型变量分割成一个字符数组(char *) 例如: this->XMeshTexturePath = FindTexturePath(XMeshTexturePath,d3dxMaterials[i].pTextureFilename); //the value of XMeshTexturePath is: Models\\Textures\\ //the value of d3dxMaterials[i].pTextureFilename is: BlaBlaBla\\BlaBla\\Cyrex.x //The Result(XMeshTexturePath) should be like this:"Models\\Textures\\Cyrex.x"

字符数组末尾的一个额外字符(Char*Result=new Char)8OI 我有一个C++函数,它将LpSTR类型变量分割成一个字符数组(char *) 例如: this->XMeshTexturePath = FindTexturePath(XMeshTexturePath,d3dxMaterials[i].pTextureFilename); //the value of XMeshTexturePath is: Models\\Textures\\ //the value of d3dxMaterials[i].pTextureFilename is: BlaBlaBla\\BlaBla\\Cyrex.x //The Result(XMeshTexturePath) should be like this:"Models\\Textures\\Cyrex.x",c++,visual-c++,directx,directx-9,C++,Visual C++,Directx,Directx 9,这是我要写的函数: int FindTextLength(char* Text){ int length h=0; 对于(int i=0;i char*FindTexturePath(char*TexturePath,LPSTR filenametombine){ int FileLength=0; int-PathAndFileLength=0; char*FileName=新字符; char*TexPathAndName=新字符; strcpy(TexPathAndName,fil

这是我要写的函数:

int FindTextLength(char* Text){
    int length
h=0; 对于(int i=0;i
char*FindTexturePath(char*TexturePath,LPSTR filenametombine){
int FileLength=0;
int-PathAndFileLength=0;
char*FileName=新字符;
char*TexPathAndName=新字符;
strcpy(TexPathAndName,filenametombine);
PathAndFileLength=FindTextLength(TexPathAndName);
for(int i=0;i>//我也尝试过:char*Result=new char[PathLength+FileLength];
//=============>>//字符*结果=新字符();
对于(int i=0;i
这应该会崩溃。您正在分配1个字符的缓冲区,然后尝试对其进行strcpy,这显然会很快使这些缓冲区溢出。此外,请记住,在字符串中的字符之后,需要为空终止符增加1个额外的空间

char *Result = new char[PathLength+FileLength];
这应该会崩溃。您正在分配1个字符的缓冲区,然后尝试对其进行strcpy,这显然会很快使这些缓冲区溢出。此外,请记住,在字符串中的字符之后,需要为空终止符增加1个额外的空间

char *Result = new char[PathLength+FileLength];
Result
指向的数据应以终止字符
\0
结尾。否则,当返回由
Result
指向的字符串时,您将遇到问题。因此

Result[PathLength+FileLength-1] = '\0' ;
确保您从未溢出缓冲区,或者更好的选择是使用
std::string

Result
指向的数据应以终止字符
\0
结尾。否则,当返回由
Result
指向的字符串时,您将遇到问题。因此

Result[PathLength+FileLength-1] = '\0' ;

确保您永远不会溢出缓冲区,或者更好的选择是使用
std::string

new char
为单个字符分配空间。您可能是指为字符数组分配空间,您可以使用
new char[N]
执行此操作,其中N是数组的大小(例如
new char[40]
new char
为单个字符分配空间。您可能是指为字符数组分配空间,这可以通过
new char[N]
实现,其中N是数组的大小(例如
new char[40]

最好的方法是使用
std::string

如果您不知道,对于字符串长度,有类似strlen/wcslen的函数。Windows shell还有一些非常方便的路径操作函数

它们中的大多数都很方便,通常您可以操作静态长度
charpath[MAX_path]={}
缓冲区


请记住,最大路径是256左右,对于嵌套较深的文件夹,存在一些问题。

最佳方法是使用
std::string

如果您不知道,对于字符串长度,有类似strlen/wcslen的函数。Windows shell还有一些非常方便的路径操作函数

它们中的大多数都很方便,通常您可以操作静态长度
charpath[MAX_path]={}
缓冲区


请记住,最大路径是256左右,对于嵌套较深的文件夹,会有一些问题。

当然,
PathLength
FileLength
在执行此操作之前应该正确初始化。这就是答案!我只是在返回结果变量之前添加了终止字符。它工作得非常好,谢谢您r信息。你不需要PathLength+FileLength+1吗?对于空终止符?@PsyCoder-请查看编辑。@Coder提到的内容非常重要。当然,
PathLength
FileLength
应该在执行此操作之前正确初始化。这就是答案!我刚刚在返回Re之前添加了终止字符sult变量。它工作得很好。谢谢你提供的信息。你不需要PathLength+FileLength+1吗?对于空终止符?@PsyCoder-请查看编辑。@Coder提到的内容非常重要。我接受你的信息。但是当我开始directX编程时,我看到了太多不可能的事情,例如:D它真的不会破坏:P Al所以,谢谢你的时间。如果这没有崩溃,那是因为你运气好,而不是因为它是正确的。正如你所说,它崩溃了。我不再使用它了:)我接受你的信息。但当我开始directX编程时,我看到了太多不可能的事情,比如:D它真的没有崩溃:P也感谢你的时间。如果没有崩溃,那是因为你运气好,而不是因为它是正确的。它就像你说的那样崩溃了。我不再使用它了:)
Result[PathLength+FileLength-1] = '\0' ;