2015-06-05 16 views
5

sadece C#bir char değişmez bir dize atama *

unsafe { 
    char* m = stackalloc char[3+1]; 
    m[0] = 'A'; 
    m[1] = 'B'; 
    m[2] = 'C'; 
    m[3] = '\0'; 
    for (char* c = m; *c != '\0'; c++) { 
     Console.WriteLine(*c); 
    } 
    Console.ReadLine(); 
} 

güvenli olmayan tarafı ile karıştırmasını mümkün C gibi bir char işaretçi string değişmezi atamak veya bunu yapmak zorunda yapmak mı Yukarıdaki kodda olduğu gibi?

cevap

5

Böyle bir şey yapabileceğini: GC bunu temizlemek olmayacak şekilde

string m = "abc"; 
unsafe 
{ 
    fixed (char* pm = m) 
    {    

    } 
} 

fixed yönetilen değişken ve "pin" o değişken için bir işaretçi olarak ayarlar. https://msdn.microsoft.com/en-US/library/f58wzh21(v=vs.80).aspx

+1

Yup, ve dize üzerinde değişiklik yapmanızı sağlar. Açıkçası, bunu yapmak çok kötü bir fikir. Özellikle interned dizeleri için. – Luaan

+2

Bu nedenle onun adı "güvensiz". – Ralf