В C ничто не мешает вам преобразовать эту структуру в char * и рассматривать ее как строку.
Сказав это, однако, вы должны быть осторожны, как вы относитесь к этой «струне». Рассмотрим следующий пример:
typedef struct format{
char R[12];
char M[15];
} format;
void main(){
format A;
int i;
strcpy(A.R,"AA");
strcpy(A.M,"AABBCC");
char *B=(char*)&A; //Note the typecasting
printf("%s",B);
for (i=0;i<strlen(B);i++){
printf("%d\n",*(B+i));
}
}
Приведенный выше пример не будет работать должным образом, то есть он не будет перебирать все символы в пределах A, потому что строки в C завершаются нулем (http://en.wikipedia.org/wiki/Null-terminated_string), и это то, как различные функции (strlen, strcpy и другие) ) знают, что они достигли конца потока символов. Таким образом, вышеприведенный код выведет «AA» и [65,65] (что является эквивалентом «ASCI»).
Чтобы приведенный выше фрагмент кода выполнял то, что от него ожидается, нам потребуется EITHER:
1) Удалите все символы «\ 0» (ноль) из A, КРОМЕ предыдущего, перед обработкой его как строки (и передачи его другим функциям, например, printf)
2) Или, если мы хотим сохранить все отдельные поля в виде строк и по-прежнему анализировать их, мы теперь должны будем использовать sizeof (format) (или sizeof (A)) вместо strlen (B) в «for» итерация выше.
Итак, да, вы можете типизировать структуру символов в (char *) и обращаться с ней как со строкой, но есть небольшая предварительная обработка, которую вы должны будете сделать, чтобы это работало, как ожидалось. Например, у вас может быть функция, которая реализует удаление "\ 0", как в (1) выше, называемая чем-то вроде structToString.