Click here to Skip to main content
15,882,388 members
Home / Discussions / C#
   

C#

 
GeneralRe: Question about (char* from string) ,(string from char*) and (char* to char) Pin
Jens Eckervogt19-Jan-24 23:52
Jens Eckervogt19-Jan-24 23:52 
GeneralRe: Question about (char* from string) ,(string from char*) and (char* to char) Pin
Richard MacCutchan20-Jan-24 0:18
mveRichard MacCutchan20-Jan-24 0:18 
GeneralRe: Question about (char* from string) ,(string from char*) and (char* to char) Pin
Jens Eckervogt20-Jan-24 5:31
Jens Eckervogt20-Jan-24 5:31 
GeneralRe: Question about (char* from string) ,(string from char*) and (char* to char) Pin
Dave Kreskowiak20-Jan-24 4:52
mveDave Kreskowiak20-Jan-24 4:52 
AnswerRe: Question about (char* from string) ,(string from char*) and (char* to char) Pin
Gerry Schmitz19-Jan-24 16:41
mveGerry Schmitz19-Jan-24 16:41 
AnswerRe: Question about (char* from string) ,(string from char*) and (char* to char) Pin
jschell22-Jan-24 5:34
jschell22-Jan-24 5:34 
GeneralRe: Question about (char* from string) ,(string from char*) and (char* to char) Pin
Jens Eckervogt22-Jan-24 14:17
Jens Eckervogt22-Jan-24 14:17 
SuggestionRe: Question about (char* from string) ,(string from char*) and (char* to char) Pin
Richard Deeming29-Jan-24 3:56
mveRichard Deeming29-Jan-24 3:56 
Quote:
C#
char[] charArr = new char[str.Length];
for (int i = 0; i < str.Length; i++)
{
    charArr[i] = str.ToCharArray()[i];
}
That code is horrendously inefficient!

Every call to the ToCharArray method[^] creates a new array containing a copy of every character in the string.

For a string of 100 characters, you are creating 101 copies of that string, just to return a single copy.

Either use:
C#
char[] charArr = new char[str.Length];
for (int i = 0; i < str.Length; i++)
{
    charArr[i] = str[i];
}
or simply:
C#
char[] charArr = str.ToCharArray();

Quote:
C#
fixed (char* charPtr = charArr)
{
    return charPtr;
}
As suggested by the enclosing braces, the fixed keyword[^] pins a managed object until the end of the enclosing block.

You return the pointer from the method, which escapes the fixed block. Once you do that, there is no guarantee that the pointer will still be valid. The GC is free to move the array around in memory as much as it wants. Whilst it may appear to work in your simple test, you can guarantee that as soon as you try to do this in "real" code running on a production system, the GC will kick in at the most inconvenient moment, move your array, and leave you with either an impossible-to-diagnose crash, or worse, corrupt data.

It's not entirely clear what you're trying to do with these functions. But what is clear is that they're not going to do what you expect them to.



"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer

QuestionHow to customize the default .Net Framework Validation Error Messages Pin
Fokwa Divine11-Jan-24 3:30
Fokwa Divine11-Jan-24 3:30 
AnswerRe: How to customize the default .Net Framework Validation Error Messages Pin
Pete O'Hanlon11-Jan-24 3:46
mvePete O'Hanlon11-Jan-24 3:46 
GeneralRe: How to customize the default .Net Framework Validation Error Messages Pin
Fokwa Divine11-Jan-24 4:17
Fokwa Divine11-Jan-24 4:17 
GeneralRe: How to customize the default .Net Framework Validation Error Messages Pin
Pete O'Hanlon11-Jan-24 18:56
mvePete O'Hanlon11-Jan-24 18:56 
Questiondisplay only first 10 files from each directory Pin
picasso29-Jan-24 11:59
picasso29-Jan-24 11:59 
AnswerRe: display only first 10 files from each directory Pin
jschell9-Jan-24 12:39
jschell9-Jan-24 12:39 
AnswerRe: display only first 10 files from each directory Pin
OriginalGriff9-Jan-24 19:54
mveOriginalGriff9-Jan-24 19:54 
AnswerRe: display only first 10 files from each directory Pin
Richard Deeming9-Jan-24 23:44
mveRichard Deeming9-Jan-24 23:44 
GeneralRe: display only first 10 files from each directory Pin
OriginalGriff10-Jan-24 23:27
mveOriginalGriff10-Jan-24 23:27 
GeneralRe: display only first 10 files from each directory Pin
Richard Deeming11-Jan-24 0:45
mveRichard Deeming11-Jan-24 0:45 
QuestionCompatibity Pin
PedroSini9-Jan-24 5:06
PedroSini9-Jan-24 5:06 
AnswerRe: Compatibity Pin
Pete O'Hanlon9-Jan-24 5:15
mvePete O'Hanlon9-Jan-24 5:15 
QuestionGet List Of Physical & Logical Drives Pin
Kevin Marois4-Jan-24 22:15
professionalKevin Marois4-Jan-24 22:15 
AnswerRe: Get List Of Physical & Logical Drives Pin
Richard Deeming4-Jan-24 22:50
mveRichard Deeming4-Jan-24 22:50 
GeneralRe: Get List Of Physical & Logical Drives Pin
Kevin Marois5-Jan-24 7:32
professionalKevin Marois5-Jan-24 7:32 
QuestionI need to convert a string to a float.... Pin
glennPattonWork33-Jan-24 2:15
professionalglennPattonWork33-Jan-24 2:15 
AnswerRe: I need to convert a string to a float.... Pin
Ron Nicholson3-Jan-24 2:23
professionalRon Nicholson3-Jan-24 2:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.