(matlab coder)Generating C++ code for scalar string results in a garbled last character?

8 次查看(过去 30 天)
my entry-point codegen function:
function out = useImageAndString(imagePathstr)%#codegen
arguments
imagePathstr (1,1) string = "./input.txt"
end
% https://www.mathworks.com/help/coder/ug/define-input-properties-programmatically-in-the-matlab-file.html
assert(isstring(imagePathstr));
assert(numel(imagePathstr)==1);
% include external C++ functions
coder.cinclude('test1.h');
coder.updateBuildInfo('addSourceFiles', 'test1.cpp');
% call C++ function
imgPath = char(imagePathstr); % Must convert to char type to pass to coder.ref/coder.rref ???
coder.ceval('myFunction',coder.rref(imgPath));
end
Generate C++ code for the above function in command line:
s = "./input.txt";
t = coder.typeof(s);
t.StringLength = 255;
t.VariableStringLength = true;
codegen -config:mex useImageAndString -args {t} -launchreport -lang:c++
I can generate C++ code successfully, but the first parameter "imagePathstr" passed to my C++ occasionally results(const char* imagePathstr) in a garbled last character. So how can I fix it?
test1.cpp:
void myFunction(const char* imagePathstr)
{
std::string dbFile(imagePathstr);
std::cout << "database name:" << dbFile << std::endl;// The last character is garbled ???
... do something
}
RUN in R2022b
  5 个评论
Walter Roberson
Walter Roberson 2023-2-23
I wonder if it is simply passing the array of bytes without null-padding it? You might need to specifically put on the null, possibly.
cui,xingxing
cui,xingxing 2023-2-23
编辑:cui,xingxing 2023-2-23
@Walter Roberson Unfortunately, this time I went to the last time parent folder and used ". /" relative path instead of using ".. /" in subfolder and still got an error and this is the result of the printed string(last two character)
-----
I'm also guessing null or "\0" or some such terminator, but what is the exact measure of how to do this? Where does the code need to be changed? How do I change it? thanks for your help again!
-----
During time, I tried to print characters like this:
const char *mystr = NULL;
//std::string myTT(mystr);
const char charNULL = '\0';
char charBinary = '0';
printf("charNULL:%d,%c,%x,%x \n", charNULL, charNULL, charNULL, mystr);
output:
charNULL:0, ,0,0

请先登录,再进行评论。

采纳的回答

Walter Roberson
Walter Roberson 2023-2-23
That's probably a NUL character, binary 0 ,
You should test it to see what the binary value is.
  3 个评论
cui,xingxing
cui,xingxing 2023-2-23
移动:Walter Roberson 2023-2-23
Thank you very much, I tried multiple paths and it worked, you can refine your answer so I can accept it

请先登录,再进行评论。

更多回答(0 个)

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by