Преобразовать D-строку в C char *

Ну в принципе вот что мне нужно

  • У меня есть extern(Аль) char * переменная
  • Я хочу назначить значение строки D

Код:

import std.stdio;
import std.string;
import core.stdc.stdlib;

extern (C) int yyparse();
extern (C) extern __gshared FILE* yyin;
extern (C) extern __gshared char* yyfilename;

void main(string[] args)
{
string filename = args[1];

auto file = File(filename, "r");

yyfilename = toStringz(filename);
yyin = file.getFP();

yyparse();
}

Тем не менее toStringz функция возвращает эту ошибку:

main.d(15): Error: cannot implicitly convert expression (toStringz(filename)) of type immutable(char)* to char*

Есть идеи, что не так?

3

Решение

Проблема в том, что yyfilenameи возвращаемое значение toStringz когда передается строка, есть разные квалификаторы const. filename неизменен (D string псевдоним immutable(char)[]), тем не мение yyfilename не имеет какого-либо const-квалификатора и поэтому является изменяемым.

У вас есть два варианта:

  1. Если вы знаете, что yyfilename не будет изменено в другом месте вашей программы, вы должны объявить его как const(char)* вместо char*,
  2. В противном случае вы должны создать копию filename при конвертации: toUTFz!(char*)(filename),
5

Другие решения

Ты можешь использовать:

import std.utf;

void main()
{
string filename;
char* yyfilename;
yyfilename = toUTFz!(char*)(filename);
// yyfilename = filename.toUTFz!(char*);  // or with UFCS syntax
}
5

По вопросам рекламы [email protected]