Я понял это. Ясно, что когда я инициализировал указатель char, его нельзя изменить, но мы можем изменить его содержимое, если выделим для него память. Я думаю, что причина этой ошибки в том, что, когда я инициализирую ее с явным присвоением массива char, программа пытается получить доступ к неприемлемому блоку памяти и пытается изменить его, что является правильным, потому что инициализация - это просто отображение адреса константы в памяти указатель. И когда с динамическим распределением памяти в начале нет выделенной константы в памяти, выделенной для указателя, и функция strcpy прекрасно копировала символы.
For Each row As DataRow In dtDataTable.Rows
strDetail = row.Item("Detail")
Next row
существует также стенография:
For Each row As DataRow In dtDataTable.Rows
strDetail = row("Detail")
Next row
Примечание, которое инструкции по стилю Microsoft для .NET теперь конкретно рекомендуют против использования венгерских префиксов типа для переменных. Вместо "strDetail", например, необходимо просто использовать "Деталь".
Dim row As DataRow
For Each row In dtDataTable.Rows
Dim strDetail As String
strDetail = row("Detail")
Console.WriteLine("Processing Detail {0}", strDetail)
Next row
Вы хотите циклично выполниться на.Rows и получить доступ к столбцу для строки как q ("столбец")
Просто:
For Each q In dtDataTable.Rows
strDetail = q("Detail")
Next
Также удостоверяются, что проверили документ msdn на любой класс, который Вы используете + intellisense
использования