我有一个方法,可以从文件路径创建 MatLab 数组名称并将其作为 std::string 返回。 生成的字符串将传递到另一个方法中,该方法将名称写入文件。当我尝试获取传入字符串的长度时,当字符串的长度为 12 或 13 个字符时,它显示 0。
我的代码:
bool MyClass::masterMethod(std::string fileURI){
FILE* dataStream;
// Assume dataStream is set up correctly
// Get arrayName from File URI
std::string arrayName = this->makeArrayNameFromPath( fileURI);
//Write array name to file
this->writeArrayName(arrayName , dataStream)
}
std::string MyClass::makeArrayNameFromPath(std::string filePathURI){
std::string tempString = filePathURI.substr(filePathURI.find_last_of('/')+1);
std::string returnString = "";
long index = 0;
for(long i = 0; i < tempString.length(); i++){
if((tempString[i] != ' ') && (tempString[i] != '.')){
returnString[index++] = tempString[i];
}
}
return returnString;
}
void MyClass::writeArrayName(std::string name , FILE *nameStream){
// long testLength = name.length();
// long testLength2 = name.size();
// const char* testChar = nam.c_str();
// long testCharLen = strlen(testChar);
// The size of the name is the number of Chars * sizeof(int8_t)
int32_t sizeOfName = (int32_t)(name.length() * sizeof(int8_t));
int32_t nameType = miINT8;
fwrite(&nameType , sizeof(int32_t) , 1 , nameStream);
fwrite(&sizeOfName, sizeof(sizeOfName), 1, nameStream);
fwrite(&name , sizeof(name[0]), sizeOfName , nameStream);
}
所以我不确定为什么字符串::长度不起作用。如果创建一个 std::string test = name,并打印出来,我可以得到字符串的值,但不能得到它的长度或大小。如果我使用 const char* testName = name.c_str();长测试 = strlen(测试名称),我得到一个正确的值,但认为没有必要。
因此,任何建议或建议都值得赞赏。
returnString[index++] = tempString[i];
不会做你认为它做的事情。它不会向字符串添加额外的空间或长度,只会覆盖字符串实际上并不拥有的位置的内存。我认为returnString.append(1, tempString[i])
或类似的应该这样做。
你从不给字符串一个大小,只是试图分配不存在的位置。
请尝试这样做以将字符添加到返回值
returnString += tempString[i];