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

Какую часть я сделал не так?

Это массив?

int main()
{
    int i;
    char id[3]; ///sample data wanted to print
    id[0] = 'id1';
    id[1] = 'id2';
    id[2] = 'id3';
    for (i = 1; i <= 3; ++i)
    {
        printf("%s", id[i]); ///The error appeared here////
    }
}
c
1
Lorale 4 Май 2020 в 16:19

2 ответа

i начинается с 1 и продолжается до 3:

for (i = 1; i <= 3; ++i)

Но вы настроили свой массив так, чтобы допустимыми индексами были 0, 1 и 2.
3 не является допустимым индексом.

Условные C-циклы всегда выглядят так:

for(i = 0; i < 3; ++i)

То есть они начинаются с 0 и идут, пока меньше размера массива.
Не меньше или равно . Это твоя ошибка.


Далее каждый элемент массива представляет собой один символ.
Но вы пытаетесь инициализировать их 3-мя буквами, например: id1.
Один символ может содержать ТОЛЬКО ОДНУ букву, а не набор из 3 букв.

Вы пытаетесь распечатать их, используя %s; но %s предназначен для строк , а не для отдельных символов.


Вот исправленная версия вашей программы.

int main()
{
    int i;
    char* id[3];    // Declare strings, not characters.
    id[0] = "id1";  // Initialize each with a string
    id[1] = "id2";
    id[2] = "id3";
    for (i = 0; i < 3; ++i)  // Set loop limit correctly.
    {
        printf("%s\n", id[i]);
    }
}
3
abelenky 4 Май 2020 в 13:30

Вы вызвали неопределенное поведение , передав данные неправильного типа: %s ожидает указатель на строку с нулевым символом в конце, когда вы передали id[i], тип которой char ( расширен до int здесь).

Вы можете использовать %c для отображения значений, определенных реализацией, для многосимвольных символьных литералов.

Также, как говорит @abelenky, диапазон петли неверен.

#include <stdio.h>

int main()
{
    int i;
    char id[3]; ///sample data wanted to print
    id[0] = 'id1';
    id[1] = 'id2';
    id[2] = 'id3';
    for (i = 0; i < 3; ++i)
    {
        printf("%c", id[i]);
    }
}

Или ты это имеешь ввиду?

#include <stdio.h>

int main()
{
    int i;
    const char* id[3]; ///sample data wanted to print
    id[0] = "id1";
    id[1] = "id2";
    id[2] = "id3";
    for (i = 0; i < 3; ++i)
    {
        printf("%s\n", id[i]);
    }
}
0
MikeCAT 4 Май 2020 в 13:25