I'm using gcc 8.2.1 and trying to build this code:
std::string dir = "Documents";
char * _tempname = static_cast <char*> (malloc( dir.length() + 14));
strncpy (_tempname, dir.c_str(), dir.length()+1 );
strncat (_tempname, "/hellooXXXXXX", 13);
but it gives me this warning:
warning:
'char* strncat(char*, const char*, size_t)'
specified bound 13 equals source length [-Wstringop-overflow=]
After searching I found that it's an overflow problem to have the size_t equals the source length according to the discussion in this link but I couldn't understand why this is considered a problem and why this overflows the destination. And how could I remove this warning without changing my code?
strncat
expects a C-string as a first argument, but you're passing some uninitialized char array to it. Also why you're allocating memory manually when you could simply dostd::string tempname = dir + "/hellooXXXXXX"
? – Engage