2010-04-22 2 views
0

Я пишу небольшое приложение C, которое запускает скрипт Matlab (файл .m). Мне нужно обменять некоторые переменные, и я не знаю, как получить массив символов, который существует в Matlab.Получение переменной MATLAB (строка) из C

Я делаю что-то вроде этого:

enter code here 
result = engGetVariable(ep,"X"); 
if (!result) 
    { 
    printf ("Error..."); 
      exit -1; 
    } 

int n = mxGetN(result); 

    char *varx = NULL; 
    memcpy(varx, mxGetData(result),n*sizeof(char)); 

Это не работает. Кто-нибудь знает, как получить строку Matlab в C? Я прочитал документацию Matlab о engGetVariable() и представленном примере, но все это разъясняет меня.

ответ

3

Ваша проблема заключается в том, что вы пытаетесь сохранить memcpy в память, которую вы никогда не выделяли. char * varx = malloc (sizeof (char) * bytes_you_need); прежде чем вы это сделаете. Установка char * в NULL означает, что у него нет адреса памяти и, следовательно, он не может служить ссылкой на любую память .... установите его в возвращаемое значение malloc, где malloc выделил некоторые байты для ваших данных.

char *varx = malloc (sizeof(char) * n); 
memcpy(varx, mxGetData(result),n*sizeof(char)); 
printf ("%s\n", varx); 
free(varx); 
+0

Хорошо, это проблема (позвольте мне сказать, «отсутствие кофе» ;-)) Но, объявляя varx, как вы сказали, или «символ varx [1000]» Есть еще проблемы. Я отлаживал, и я обнаружил, что если у меня есть переменная в Matlab, как «X =« Привет, ребята! » при возврате его в CI имеет следующий вид: varx [0] = 'H' varx [1] = '\ 0' varx [2] = 'e' varx [3] = '\ 0' .. и т. д. Возможно, это потому, что в Matlab символы имеют 16 бит ... и я работаю с 8 бит. Выполнение в Matlab «X = int8 (« Привет, люди! »), Похоже, работает, но с некоторыми символами не работает. Спасибо! – Hamming

+0

Да, ты прибил его. он возвращает вам utf8, так как вы получаете ascii, первые 8 бит будут одинаковыми, поэтому пропуск любого другого символа будет работать. вы также можете попробовать использовать wchar_t и сделать это с широким характером, но это может быть не обязательно для ваших целей. (wchar_t == char * 2) – 2010-04-22 13:28:16

+0

Я делаю преобразование в Matlab (что проще :-) to uint8 и работает как шарм! – Hamming

Смежные вопросы