Распечатка массива на С без заданной длины - PullRequest
0 голосов
/ 29 сентября 2019

Я хотел бы распечатать весь массив на C. Я пытался использовать sizeof, чтобы определить длину массива, чтобы напечатать его с циклом for, но он не работал и возвратилошибка.Что я сделал неправильно, а еще можно попробовать?

// The items in the array are determined by user input
int length = (sizeof(my_array) / sizeof( my_array[0])) + 1;
    printf("%d\n", length);
    for(int i = 0; i < (sizeof(my_array) / sizeof( my_array[0])) + 1; i++)
    {
            printf("%s\n", my_array[i]);
    }

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Код обращается к данным за пределами массива.Это приводит к неопределенному поведению: https://en.wikipedia.org/wiki/Undefined_behavior.

Вы вычисляете количество элементов массива и добавляете 1. Вам нужно удалить + 1, чтобы он выглядел так:

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

Я просто немного изменил ваш код и сделал из него самодостаточный пример:

#include <stdio.h>

int main() {
    char *my_array[] = {"abc", "def"};
    int length = (sizeof(my_array) / sizeof(my_array[0]));
    printf("%d\n", length);
    for (int i = 0; i < length; i++) {
        printf("%s\n", my_array[i]);
    }
    return 0;
}

Он выдает на консоль следующее:

2
abc
def

Итаквсе элементы печатаются при снятии + 1.

0 голосов
/ 29 сентября 2019

Используйте следующую строку кода:

int length = sizeof(my_array)/sizeof(int); //if the array is type int

Используйте любой тип данных массива вместо int

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...