Exception thrown at 0x7C131F4C (ucrtbased.dll) in ICP LAB ASSIGNMENT PROJECT.exe: 0xC0000005

1

I was trying to print some array but it won't print no matter what.

Which part did I do wrong?

Is it the array?

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
asked on Stack Overflow May 4, 2020 by Lorale

2 Answers

4

i starts at 1, and goes to 3:

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

But you set up your array so that valid indicies are 0, 1, and 2.
3 is not a valid index.

Convention C-loops always look like this:

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

That is, they start at 0 and go while less than the size of the array.
Not less than or equal to. That is your mistake.


Next, each element of the array is a single character.
But you are trying to initialize them with 3-letters, such as: id1.
A single character can hold ONE LETTER ONLY, not a set of 3 letters.

You are trying to print them out using %s; but %s is for strings, not single characters.


Here is a corrected version of your program.

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]);
    }
}
answered on Stack Overflow May 4, 2020 by abelenky • edited May 4, 2020 by abelenky
0

You invoked undefined behavior by passing data having wrong type: %s expects an pointer to a null-terminated string while you passed id[i], whose type is char (expanded to int here).

You can use %c to display the values of implementation-defined values of multi-character character literals.

Also The loop range is wrong as @abelenky says.

#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]);
    }
}

Or do you mean this?

#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]);
    }
}
answered on Stack Overflow May 4, 2020 by MikeCAT

User contributions licensed under CC BY-SA 3.0