어떤 4. .NET 3.5에서이 변경 (그리고이 없어야한다, btw, msvcrt.dll은 프레임 워크의 일부가 아닙니다. Microsft C++ 런타임 라이브러리입니다. 프로젝트에서 변경된 사항이 없습니까?
난 그냥 예상대로 작동 및 인쇄 "4"하는이 코드를 시도 :
class Test
{
public unsafe static void Main(string[] args)
{
byte[] bytes = new byte[] {70, 40, 30, 51, 0};
fixed(byte* ptr = bytes)
{
int len = strlen(ptr);
Console.WriteLine(len);
}
}
[DllImport("msvcrt.dll")]
private unsafe static extern int strlen(byte* pByte);
}
적 관리 코드에서 나 strlen를 호출 할 이유 그것은 내게 불분명하지만, 물론 당신이있을 수 있습니다 너의 이유. 당신이 다른 관리 구현을해야하는 경우, 여기 당신이 사용할 수있는 하나의 라이너입니다
멀티 바이트 (유니 코드) 문자를 처리하지 않습니다 물론
private static int managed_strlen(byte[] bytes)
{
return bytes.TakeWhile(b => b != 0).Count();
}
,하지만 난 나 strlen 중 하나를 수행합니다 생각하지 않습니다. 그냥 재미를 위해
당신에게 크리스 감사드립니다. 그것은 다시 매력처럼 작동합니다.) +1 – SDReyes
위대한, 나는 그것이 기쁜 것을 도왔다. –
+1 오늘 직장에서 똑같은 문제가 있었고 해결책은 내가 필요로하는 것이 었습니다. 고맙습니다. –