Как напечатать три байта в структуре в C - PullRequest
1 голос
/ 08 марта 2011

У меня есть следующий код C:

person->title

Заголовок представляет собой трехбайтовый массив символов. Все, что я хочу сделать, это распечатать эти три байта. Я не могу использовать строковый форматер с printf, потому что нет нулевого байта.

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

Заранее спасибо!

UPDATE

Оказывается, это не массив, а три соседних байта. Если я пытаюсь скомпилировать с предложенным кодом:

личностно> название [0]

Сбой с ошибкой:

test.c:46: error: subscripted value is neither array nor pointer.

Ответы [ 4 ]

3 голосов
/ 08 марта 2011
printf("%c%c%c",person->title[0],person->title[1],person->title[2]);
1 голос
/ 08 марта 2011

Пожалуйста, попробуйте это ....

char *a = &(person->title);
printf("%c %c %c", *a, *(a+1) , *(a+2));

РЕДАКТИРОВАТЬ

На основе 20 полей в структуре это гораздо более простое смежное, непрерывное распределение памятипроисходит в случае структуры

например:

struct test {
 // Suppose the elements of the struct are only title and name each having 3 bytes
}*person;

// The first 3 bytes are w.r.t title and the very next 3 is allocated to name, note for 
// struct it`s stored as contiguous memory allocation


// code can be rewritten as - to display title and name

char *a = &(person->title);
printf("Title : %c%c%c", *a, *(a+1), *(a+2));
printf("Name : %c%c%c", *(a+3), *(a+4), *(a+5));
1 голос
/ 08 марта 2011

Вы можете использовать что-то вроде:

printf("%c%c%c", person->title[0], person->title[1], person->title[2]);

если вы уверены, что три байта заполнены. Если он может быть короче трех байтов, попробуйте что-то вроде:

for (int i=0; (i<3) && (person->title[i] != 0); i++)
  printf("%c", person->title[i]);
0 голосов
/ 08 марта 2011

Для структур - вы можете использовать тот факт, что память будет выделяться как непрерывные байты.Вы также можете использовать fwrite () для точного управления количеством записываемых байтов (используя «stdout» в качестве указателя файла, если вы хотите, чтобы он выводился на терминал).

например,

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct _test
{
  char title[3];
  char job[4];
  char other[5];
} Test;

int main(int argc, char* argv)
{
  Test test;

  strcpy(test.title,"MR_");
  strcpy(test.job,"1234");
  strcpy(test.other,"OTHER"); 

  fwrite(&test,1,sizeof(Test),stdout);
  printf("\n");
}

Будетвывод:

MR_1234OTHER
...