#include <iostream>
int main() {
int bit = 1;
int init = 0xf ^ (1 << bit);
char* c = newchar(2);
sprintf(c, "%x", init);
std::string initVal = std::string("4'h") + c;
std::cout << initVal << std::endl;
}
Above code is compiling as I expect it to be.
Problem is when I run coverity on it, it prompts me the following message:
Out-of-bounds access (ARRAY_VS_SINGLETON). Passing "c" to function "operator +(HSTString const &, char const *)" which uses it as an array. This might corrupt or misinterpret adjacent memory locations
I am out of ideas for now. Can champs here figure out what I am doing wrong?
Did you mean to put newchar[2]; instead? The former creates a *single* character with the value of 2 (some unprintable thing), not an array of 2. You might need more space for your sprintf anyway to include the terminating null and such, I don't remember if %x adds 0x or anything when you print like that.
Somebody told me this and I am agree with this alternative..
You cannot store the result of sprintf call into the location pointed to by c in the first place because you only allocated a single char, initialising it with a value of 2. Perhaps you wanted to use new char[2] instead, but that would still be rather unnecessary. Instead, you might as well just use the standard C++-specific facilities, e.g.,