2014-02-01 3 views
0
#define NAMESIZE 20 

struct point { 
    int x; 
    int y; 
}; 

struct rectangle { 
    struct point upperleft; 
    struct point lowerright; 
    char label[NAMESIZE + 1]; 
}; 

В моем главномИнициализация символа внутри структуры

int main(void) { 


    struct rectangle r1; 
    r1.upperleft.x = 1; 
    r1.upperleft.y = 4; 
    r1.lowerright.x = 4; 
    r1.lowerright.y = 1; 
    strcpy_s(r1.label, NAMESIZE, "hi"); 




    printf("Upper left: (%d, %d)\n", r1.upperleft.x, r1.upperleft.y); 
    printf("Lower Right: (%d, %d)\n", r1.lowerright.x, r1.lowerright.y); 
    printf("Name of rectangle: %d", r1.label); 
    return 0; 
} 

имени Моего прямоугольника является адресом памяти, как я должен правильно инициализировать переменный характер моей структуры?

+1

Используйте '% s' вместо'% d' в 'Е ("Имя прямоугольника:% D", r1.label);' – Marian

+0

@Marian правильно, а также, но тот не связаны с названием вопрос. Хотя, он тоже забыл символ '&'. – chacham15

+0

Спасибо, ребята, это сделал трюк. – user2917692

ответ

0

Это очистит его: memset(&r1.label, 0, sizeof(r1.label))

Это исправление к тому, что у вас есть: strcpy_s(&r1.label, NAMESIZE+1, "hi");

& возвращает «адрес». Таким образом, &r1.label является адресом метки в r1.

+1

'strcpy_s (r1.label, NAMESIZE + 1," hi ");' достаточно - no '&'. – chux

+0

@chux strcpy_s принимает указатель в качестве первого аргумента, поэтому происходит неявное литье. лично я ненавижу неявные броски, потому что что-то может измениться в будущем, или вы можете работать с версией stdc, не соответствующей стандартам. – chacham15

1
struct rectangle r1 = {{1,4}, {4,1}, "hi"}; 

    printf("Upper left: (%d, %d)\n", r1.upperleft.x, r1.upperleft.y); 
    printf("Lower Right: (%d, %d)\n", r1.lowerright.x, r1.lowerright.y); 
    printf("Name of rectangle: %s", r1.label); 
Смежные вопросы