C # не может установить строковое значение - вместо этого устанавливается \ 0 - PullRequest
1 голос
/ 03 июня 2019

Я отлаживаю юнит-тест. Приведенный ниже код в классе модульного тестирования четко устанавливает строку в значение «2». Но отладчик переводит его на (см. Скриншот) "\ 0". Я изменил изменение строкового значения на другое значение с n символами, и оно показывалось как n \ 0. То есть \ 0 \ 0 \ 0 \ 0 \ 0 \ 0.

Из-за этого также не пройден модульный тест.

Я попытался изменить значение для непосредственного окна обратно на 2, а затем прошел модульный тест.

password2 = "2";

Почему Visual Studio / C # не может присвоить значение 2 в строку?

\0

1 Ответ

0 голосов
/ 04 июня 2019

поговорил с разработчиком и тест прошел плохо.Это также не было выбрано CI, так что это был идеальный шторм.В тесте использовалась RtlZeroMemory для обнуления ссылки на память, которую я раньше не видел.

Спасибо всем, кто потратил время на исследование.

[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("...")]
[ComVisible(true)]
public class FileEncryption
{
    [DllImport("KERNEL32.DLL", EntryPoint = "RtlZeroMemory")]
    public static extern bool ZeroMemory(IntPtr Destination, int Length);

    public void Decrypt(string filenamewithpath, string password)
    {
        // We manually control memory and free when it is completed
        GCHandle gch = GCHandle.Alloc(password, GCHandleType.Pinned);
        try
        {
            ...
            ZeroMemory(gch.AddrOfPinnedObject(), password.Length * 2);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            gch.Free();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...