Элементы массива распечатываются в обратном порядке - PullRequest
0 голосов
/ 16 октября 2019

Я хочу распечатать все элементы массива для отладки моей программы.

Вот цикл for для вывода всех элементов массива

for(int i = 0; i <= 9; i++) {
        printf("Words: %s\n", &words[i]);
    }

У меня есть заголовокфайл, содержащий массив const char. Это требуется для задачи. Я знаю, что, вероятно, не рекомендуется помещать их в заголовочные файлы.

const char *words[10] = {'foo', 'bar', 'hello', 'world'};

Мой вывод при запуске этого кода очень странный, поскольку он печатает все задом наперед.

Keywords: oof
Keywords: rab
Keywords: olleh
Keywords: dlrow

Иногда, это даже добавило бы случайные полные остановки в конце каждого ключевого слова. Почему это? Я не написал ничего, кроме этого.

Ответы [ 2 ]

3 голосов
/ 16 октября 2019

Для начала используйте строковые литералы вместо символьных литералов

const char *words[10] = {"foo", "bar", "hello", "world"};

Обратите внимание, что все элементы массива, начиная с индекса 4, инициализируются нулевыми указателями.

Ипросто используйте

for(int i = 0; words[i] != NULL && i < 10; i++) {
        printf("Keywords: %s\n", keyWords[i]);
                                 ^^^^^^^^ 
    }

Вот демонстрационная программа

#include <stdio.h>

int main(void) 
{
    const char *words[10] = {"foo", "bar", "hello", "world"};

    for ( size_t i = 0; words[i] != NULL && i < 10; i++ ) puts( words[i] );

    return 0;
}

Ее вывод

foo
bar
hello
world

Обратите внимание на опечатку во фрагменте кода тура. Или используйте имя words или keywords для именования массива.

0 голосов
/ 16 октября 2019

Вы должны использовать «& ключевые слова», только когда пишете scanf, а не printf. Сделайте следующее:

printf("Keywords: %s\n", keyWords[i]);
...