Это вызов стандартной C-функции, который копирует C-строку из `argv[1]` (включая нулевой терминатор) в буфер `buf`. Ключевые моменты: - Требования: `argv[1]` должен существовать (проверка argc>1argc>1argc>1) и быть нуль-терминированным; `buf` должен быть достаточно большим. - Если длина строки превышает ёмкость `buf`, поведение неопределено (переполнение буфера, крах, уязвимость). Примеры безопасных подходов (кратко): - Проверка длины перед копированием: Используйте проверку strlen(argv[1])<sizeof(buf)strlen(argv[1]) < sizeof(buf)strlen(argv[1])<sizeof(buf), затем `strcpy`. - strncpy с ручным терминированием: `strncpy(buf, argv[1], sizeof buf - 1); buf[sizeof buf - 1] = '\0';` (обратите внимание, что `strncpy` не гарантирует `\0`, если исходник длиннее). - strlcpy (где доступно): `strlcpy(buf, argv[1], sizeof buf);` — удобнее и безопаснее. - snprintf: `snprintf(buf, sizeof buf, "%s", argv[1]);` - Динамическое выделение: `char *s = strdup(argv[1]); /* проверить NULL */` Рекомендация: никогда не вызывайте `strcpy(buf, argv[1])` без проверки размера и наличия аргумента; предпочитайте `snprintf`, `strlcpy` или динамическое выделение.
Ключевые моменты:
- Требования: `argv[1]` должен существовать (проверка argc>1argc>1argc>1) и быть нуль-терминированным; `buf` должен быть достаточно большим.
- Если длина строки превышает ёмкость `buf`, поведение неопределено (переполнение буфера, крах, уязвимость).
Примеры безопасных подходов (кратко):
- Проверка длины перед копированием:
Используйте проверку strlen(argv[1])<sizeof(buf)strlen(argv[1]) < sizeof(buf)strlen(argv[1])<sizeof(buf), затем `strcpy`.
- strncpy с ручным терминированием:
`strncpy(buf, argv[1], sizeof buf - 1); buf[sizeof buf - 1] = '\0';` (обратите внимание, что `strncpy` не гарантирует `\0`, если исходник длиннее).
- strlcpy (где доступно):
`strlcpy(buf, argv[1], sizeof buf);` — удобнее и безопаснее.
- snprintf:
`snprintf(buf, sizeof buf, "%s", argv[1]);`
- Динамическое выделение:
`char *s = strdup(argv[1]); /* проверить NULL */`
Рекомендация: никогда не вызывайте `strcpy(buf, argv[1])` без проверки размера и наличия аргумента; предпочитайте `snprintf`, `strlcpy` или динамическое выделение.