вопрос о символах c

#c #data-structures #types #char

#c #структуры данных #типы #символ

Вопрос:

итак, я внедряю эту шахматную программу на C и пытаюсь интегрировать в протокол winboard … одна из функций, которые, по их словам, мне нужно написать для этого, должна иметь следующую подпись:

 char *MoveToText(MOVE move);            // converts the move from your internal format to text like e2e2, e1g1, a7a8q.
  

мой вопрос в том …. текстовые форматы чем-то похожи на e2e2 …. но тип возвращаемого значения этой функции — char … и, насколько я могу понять, char — это всего лишь один символ….

итак, почему они говорят мне использовать эту подпись?

или я ошибаюсь, и на самом деле char также может хранить несколько символов, таких как e2e2, e1g1 и т.д.?

Комментарии:

1. У вас есть URL документации, на который вы случайно ссылаетесь?

2. Я только что получил это из этой темы: open-aurec.com/wbforum/viewtopic.php?f=24amp;t=51739

Ответ №1:

Да, в C символ * указывает на массив символов. C обрабатывает массивы символов как строки, заканчивающиеся нулевым байтом.

Комментарии:

1. Разве строки ASCII / UTF-8 не должны быть массивами символов, заканчивающимися нулем? Нет требования к нулю в конце символа[] (хотя это распространенное соглашение)

2. @Phil Строка — это просто массив символов, но я предполагаю, что то, что она заканчивается нулем, делает ее строкой, а не просто массивом. Но если вы попытаетесь использовать ненулевой завершающийся символ[] в функции, которая ожидает строку, вы либо получите ошибку segfault, либо мусор, либо другое неожиданное поведение.

Ответ №2:

Возвращаемый символ * или строка в стиле c =)

Ответ №3:

char * является указателем на char — адрес последовательности символов.

Ответ №4:

Он возвращает указатель на символ char, который в основном является c-строкой.

Взгляните на это руководство: http://www.cprogramming.com/tutorial/lesson9.html