Следующий код:
while (node)
{
if (node->previous== NULL) break;
struct Node* prevNode = node->previous;
len = strlen(prevNode->entity);
//pp is a char* fyi
pp-=len;
strncpy(pp, prevNode->entity, len+1);
*(--pp) = '/';
node = prevNode;
}
Создает следующее предупреждение / ошибку в GCC (я рассматриваю все предупреждения как ошибки):
../someFile.C:1116:24: error: 'char* strncpy(char*, const char*, size_t)' specified bound depends on the length of the source argument [-Werror=stringop-overflow=]
1116 | strncpy(pp, prevNode->entity, len+1);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../someFile.C:1114:29: note: length computed here
1114 | len = strlen(prevNode->entity);
| ~~~~~~^~~~~~~~~~~~~~~~~~~~
Почему GCC дает мне предупреждение?Что плохого в том, чтобы полагаться на размер исходного аргумента для размера буфера?Может кто-нибудь привести пример того, какие проблемы это может вызвать?Код делает то, что должен, мне просто любопытно, почему я получаю предупреждение.