Вы неправильно понимаете, как работает математика? 10 - 14 = -4
EDIT:
Был
char str[10];
int length = sizeof(str) - 14;
ИНТ исходное сообщение. (см правок)
Кроме того, вы не должны использовать sizeof
, чтобы вычислить длину строки, используйте strlen()
. Оператор sizeof
используется для определения размера типа, если str
является массивом или указателем sizeof
будет возвращать количество элементов в первом случае и размер указателя, эквивалентный sizeof(void *)
во втором.
Строка представляет собой массив, но размер такого массива не является длиной строки, строка из 10 символов может быть сохранена в массиве из 100 элементов, поэтому проблема не в strncpy
(), которую вы должны избегайте BTW, потому что он не гарантирует nul
завершение), настоящая проблема заключается в том, как вы его обрабатываете.
Предположим, у вас есть действительная строка длины ≥ 14, а затем
strcpy(substr, str + 14)
должно быть достаточно!
Вы должны убедиться, что целевой массив substr
достаточно, конечно, большой, и что длина str
больше или равна или, вы в любом из обоих случаях вызвать неопределенное поведение.
Если вы ранее знаете длину str
то, вы можете попробовать
memcpy(substr, str + 14, length_str - 14);
substr[length_str - 14] = '\0';
substr
отмечают, что должен иметь по крайней мере length_str - 14
элементов +1 для nul
терминатора, а также, если вы знаете, что есть '\0'
терминатор в str
, затем
// Leaving + 1 explicitly to denote the '\0'
memcpy(substr, str + 14, length_str - 14 + 1);
должны скопировать его в одном вызове.
ли вы, возможно, означает, 'длина ИНТ = STRLEN (НТР) - 14;'? Я предполагаю, что вы проверяете, что это как минимум 15 символов. – AntonH
Что такое объявление 'str'? –
Кроме того, что не так, просто используя 'strcpy'? 'strcpy (substr, str + 14);' – AntonH