В коде, который вы опубликовали, ничего не происходит, но он не имеет контекста. Например, если buffer[]
является локальной переменной, она будет создана в стеке, и возможно, что вы переполняете стек.
Вы можете объявить его статическим, чтобы узнать, не исчезла ли проблема, которая проверила бы переполнение стека. Если переменная должна быть временной, вам нужно будет выделить достаточно больший стек.
Обратите внимание, что переполнение стека может не происходить специально на strncpy. buffer
может содержаться в стеке, но его размер может вытолкнуть другие объекты за стек, так что запись в их вызывает повреждение стека. Точка отказа обычно возникает, когда функция пытается вернуться с использованием поврежденного обратного адреса. Вы действительно должны использовать отладчик для ввода кода, чтобы узнать, что происходит с стеком вызовов, указателем стека и сбоем функции на strncpy или, вернее, при возврате вызывающей функции.
Один пункт о безопасности кода и ремонтопригодности, вы должны отдать предпочтение:
strncpy((char *)buffer, "CREATED_BY", sizeof(buffer) - 1);
Вы могли бы также более удобно использовать Инициализатора:
unsigned char buffer[256] = "CREATED_BY" ;
Здесь нет смысла использовать 'strncpy'.Возможно, вы избежите потенциального переполнения буфера, но его буфер не достаточно велик, и у вас будет другая проблема. Однако не похоже, что это причина проблемы. –
Я не вижу проблемы с этим, иначе это бессмысленность. Если вы собираетесь использовать 'strncpy()', вы должны помнить, что он всегда пишет N символов, где N - последний параметр. **. Если длина исходной строки, включая нулевой ограничитель, меньше N, то она будет заполнять оставшееся пространство до N с помощью 0. Если он длиннее, он копирует до N символов и НЕ устанавливает последний символ равным 0. Но он * всегда * пишет N символов так или иначе. Я думаю, что у вас может быть другая проблема, которая перегружается в * этот * буфер и, возможно, что 0-clear подвергает этой проблеме. – WhozCraig
Спасибо, ребята, я удивленно почесывал голову. Точка о чем-то другом ovrrunning хороша. Учитывая ограничения платы и пространства стека, это, возможно, проблема. Время от времени отлаживается. – IainS