2016-04-08 4 views
0

Я просто играю с простым кодом c. Я хочу напечатать всю строку дней в указателе массива дней. Однако я бегу к ошибке сегментации. Проблема заключается в цикле for. Что я делаю неправильно здесь. БлагодаряChar array Ошибка сегментации

main(){ 
    const char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",\ 
         "Thursday", "Friday", "Saturday", "Sunday"}; 
    int i; 

    for(i = 0; i < sizeof(days); ++i) 
    printf("%s\n", days[i]); 
} 
+3

Оператор 'sizeof' возвращает размер в байтах, делятся на' sizeof (* days) ', чтобы получить количество элементов в массиве – BeyelerStudios

ответ

2
int main(){ 
    const char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",\ 
         "Thursday", "Friday", "Saturday", "Sunday"}; 
    size_t i; 
    for(i = 0; i < sizeof days/sizeof days[0]; ++i) 
    printf("%s\n", days[i]); 
} 

sizeof day дают размер всего массива, так что вы должны разделить его с размером одного из ее элементов, чтобы получить номер элемента он содержит.

+0

благодаря всем за помощью –

2

изменить for заявление

for(i = 0; i < (sizeof(days)/sizeof(days[0])); ++i)

Выражение sizeof дает количество элементов в массиве, в отличие от числа байтов, занимает

Классический способ сделать это макрос

#define SIZEOF(X) (sizeof(X)/sizeof(X[0]))

, а затем использовать SIZEOF вместо sizeof

Смежные вопросы