#include <string.h>
void test(char charArray [100])
{
strncpy(charArray, "some text", sizeof(charArray));
}
int main()
{
char charArray [100];
test(charArray);
// EDIT: According to comment from P0W I added this line - where is the difference?
strncpy(charArray, "some text", sizeof(charArray)); // compiles OK
}
Скомпилировано с gcc 4.9.2 на SLES 11 SP2 с этой командной строкой g++ gcc-warning-bug-2.cpp -Wall -Wextra -c -Werror
Я получаю это предупреждение. Из-за -Werror
флагом я не могу скомпилировать проект:gcc 4.9.2 ошибка в -Werror = sizeof-pointer-memaccess?
gcc-warning-bug-2.cpp: In function ‘void test(char*)’:
gcc-warning-bug-2.cpp:5:40: error: argument to ‘sizeof’ in ‘char* strncpy(char*, const char*, size_t)’ call is the same expression as the destination; did you mean to provide an explicit length? [-Werror=sizeof-pointer-memaccess]
strncpy(charArray, "some text", sizeof(charArray));
^
cc1plus: all warnings being treated as errors
Согласно фактической НКУ 4.9.2 документации https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
-Wsizeof-pointer-memaccess
Warn for suspicious length parameters to certain string and memory built-in functions if the argument uses sizeof.
This warning warns e.g. about memset (ptr, 0, sizeof (ptr)); if ptr is not an array, but a pointer, and suggests a possible fix, or about memcpy (&foo, ptr, sizeof (&foo));. This warning is enabled by -Wall.
это должно быть собран хорошо, потому что charArray
массив!
Ошибка? Должен ли я сообщить об этом GNU gcc команде разработчиков?
'' charArray'' - это указатель, массив распадается на указатель при передаче в качестве аргумента функции. 'sizeof' здесь задает размер указателя' char * ' – P0W
@ P0W: см. отредактированный код. –