exponenta event banner

Создание строк C/C + + из строк MATLAB и векторов строк символов

По умолчанию строки MATLAB ® и векторы строк символов сопоставляются с массивами символов C/C + + в сгенерированном коде. Чтобы генерировать строки C/C + + из строк MATLAB или векторов символьных строк, строка MATLAB или вектор символьной строки должны быть нулевыми (заканчиваться нулем,0). Например, строка "Hello World"+char(0) и вектор символьной строки ['Hello World', 0] имеют нулевое значение.

Если строка MATLAB или вектор символьной строки не оканчивается null, например, 'Hello World', строка MATLAB сопоставляется с массивами символов { 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd' } в сгенерированном коде C/C + +.

В MATLAB рассмотрим эту функцию:

function t = CharArrayNullAtEnd()
    t = ['Hello World',0]; 
end 

Соответствующий код C/C + +, сгенерированный для этой функции:

void CharArrayNullAtEnd(char t[12])
{
  int i;
  static const char cv[12] = "Hello World"; 
  for (i = 0; i < 12; i++) {
    t[i] = cv[i];
  }
}

Генерация строк C/C + + вместо символьных массивов улучшает читаемость сгенерированного кода.

Примечание

Если длина символов меньше LoopUnrollThreshold, строка с двойной кавычкой C/C + + не генерируется в коде, даже если она имеет нулевое окончание. Вместо этого генератор кода создает массив символов C, который имеет индивидуальные назначения символов. По умолчанию присвоенное значение LoopUnrollThreshold является 5. Дополнительные сведения о разворачивании цикла см. в разделе Разворачивание для циклов.

Добавление новой строки к строкам в сгенерированном коде

При создании строк C/C + + из строк MATLAB с нулевым окончанием или символьного вектора строки используйте newline функция в строке MATLAB или символьном векторе строки. Отображение генератора кода newline функция к символу новой строки '\n' в созданном коде. При использовании символа '\n' вместо этого в коде MATLAB он выводится и сопоставляется с '\\n' в созданном коде.

В MATLAB рассмотрим эту функцию:

function StringNewline()

    string1 = ['Hello World' 0];
    string2 = ['My MATLAB' 0];
    formatSpecifier = ['%s' newline 0];
    coder.cinclude('<stdio.h>');
    coder.ceval('printf',coder.rref(formatSpecifier),coder.rref(string1));
    coder.ceval('printf',coder.rref(formatSpecifier),coder.rref(string2));
    
end

Соответствующий код C/C + +, сгенерированный для этой функции:

void StringNewline(const emlrtStack *sp)
{
  static const char_T formatSpecifier[4] = "%s\n";
  static const char_T string1[12] = "Hello World";
  static const char_T string2[14] = "My MATLAB";
  (void)sp;
  printf(formatSpecifier, string1);
  printf(formatSpecifier, string2);
}
В функции MATLAB StringNewline, если formatSpecifier является '%s\n' вместо ['%s' newline 0], затем символ '\n' сбежал, и у вас есть {'\\','n'} в сгенерированном коде C/C + +.

Ограничения

Вектор символьной строки MATLAB, имеющий, например, несколько нулей ['Hello', 0, 0], не поддерживается для генерации строк C/C + +.

См. также

| | | | |

Связанные темы