2012-06-04 3 views
3

Имея проблемы с печатной строкой из структур в C ...Не печатает строку из структуры в C

typedef struct box{ 
    char *REF_OR_SYS; int num, x, y, w, h, o; 
}BOX; 

sscanf(str, "%s %d %d %d %d %d %d", &label, &refNum, &x, &y, &w, &h, &o); 
BOX detect = {label, refNum, x, y, w, h, o}; 
printf("\nLABEL IS %s\n", detect.REF_OR_SYS); //Prints out the String correctly 
               //(Either the word REF or SYS) 
return detect; 

Когда это структура передается в другую структуру, все отображается верно КРОМЕ строку ..

void printBox(BOX detect){ 
printf("Type: %s Ref: %d X: %d Y: %d W: %d H: %d O:%d\n", 
detect.REF_OR_SYS, detect.num, detect.x, 
detect.y, detect.w, detect.h, detect.o); 

}

Я пропускаю что-то простое? REF_OR_SYS всегда печатает как _ _?

+2

Is 'label' локальной переменной в некоторой другой функции? – hmjd

+2

'REF_OR_SYS' - простой символ char *, а не массив символов, вам нужно выделить правильную память для использования вашей строки. – gliderkite

+0

ярлык был обозначением символа [4] в этой функции – SetSlapShot

ответ

6

Используйте strdup() (как правило, доступны, если не использовать malloc()), чтобы скопировать строку читать в label по sscanf():

detect.REF_OR_SYS = strdup(label); 

как, когда эта функция возвращает label является вне области действия и REF_OR_SYS будет свисающим указателем. Не забудьте указать free(), когда больше не требуется.

+0

Работал отлично. Спасибо (это было слишком долго, так как я сделал динамическое распределение памяти в C ...) – SetSlapShot

4

Предполагая, что label является локальным массивом символов, вы возвращаете указатель на локальное хранилище функций, которое становится недопустимым указателем при выходе из функции.

Вы, вероятно, нужно

char REF_OR_SYS[32]; 

Или динамически выделять строку с помощью malloc() (или strdup(), если у вас есть).

1

Попробуйте определения массива

typedef struct box{ 
    char REF_OR_SYS[20]; int num, x, y, w, h, o; 
}BOX; 
1
typedef struct box{ 
    char REF_OR_SYS[N]; int num, x, y, w, h, o; 
} BOX; 

где N- требуемая длина (константа) и

strcpy(detect.REF_OR_SYS, label); 
Смежные вопросы