Вы не должны назначать буфер;это плохой код (не делай, что хочешь).Вы можете использовать strncpy, но вместо этого, почему бы просто не использовать CString напрямую:
d[i] = atof(val.ElementAt(i));
Если вы компилируете для MBCS, это должно работать.
Кстати, вы также можете использоватьперегрузка оператора [], чтобы сделать код немного чище, например:
d[i] = atof(val[i]);
Редактировать: Если вы используете UNICODE, вам нужна динамическая макро-версия atof MBCS / UNICODE,что _ttof.См. http://msdn.microsoft.com/en-us/library/hc25t012%28v=VS.90%29.aspx для полной ссылки.Таким образом, код становится следующим:
d[i] = _ttof(var[i]);
О, забыл включить (дух): все эти функции возвращают значение типа double, что не обязательно совпадает с float.Поэтому измените массив результатов на double или явным образом приведите результат преобразования.