TraineeGuy
TraineeGuy

Reputation: 91

Iterate through an array of characters in C

Recently I saw this while loop condition in C in the example below but I have no idea what the while condition really means and how the compiler knows when it is done. Could someone explain it to me?

This is what I believe it means: while loop iterates through the char array until the ending of the array since there is nothing else then the while loop ends, or am I wrong? I tried to use the same while loop but in another language such as Go, however, the compiler threw an error saying that I cannot use a non-bool.

// C program to demonstrate 
// example of tolower() function. 

#include <ctype.h> 
#include <stdio.h> 

int main() 
{ 
    int j = 0; 
    char str[] = "GEEKSFORGEEKS\n"; 

    // Character to be converted to lowercase 
    char ch = 'G'; 

    // convert ch to lowercase using toLower() 
    char ch; 

    while (str[j]) { // <- this part, how is this a condition?
        ch = str[j]; 

        // convert ch to lowercase using toLower() 
        putchar(tolower(ch)); 

        j++; 
    } 

    return 0; 
} 

Upvotes: 0

Views: 4898

Answers (3)

Shubham
Shubham

Reputation: 1153

Although, you got your answer. Still, I wanna add some more details or an explanatory answer here.

In C, a conditional statement will have either the value 1 or 0. In the end, they all are evaluated to Boolean values true or false or 1 or 0.

So first, try to understand or dry run that while(str[j]). Guess what will be the value of str[j] when j = 0. It'll be the first character "G". Similarly in the next iteration, you'll get the next character until NULL character or String Termination character. Now, anything in between those parentheses in while(str[j]) will be considered as a conditional statement and they all are evaluated to 1 or 0. Now here's the thing that anyhow if that conditional statement isn't being evaluated specifically to 0, then It'll be supposed to have the value of 1. So, here str[j] when j = 0 will be evaluated as 1, then next character and so on. Now, when we find \0 which is an escape character equivalent to 0. So, at \0 while loop will terminate as the condition will be false.

Can, you tell me what will be the output of this program?

#include<stdio.h>

int main()
{
    if(printf("Hello TraineeGuy\n"))
        printf("TRUE");
    else
        printf("FALSE");
    return 0;
}

Upvotes: 0

flaredev
flaredev

Reputation: 369

You can think of an array of chars as following:

enter image description here

So as you see in the picture an array of chars is already a pointer, and each of the characters has an address, as well that the address of a pointer is the address of the first element, so when you declared

char str[] = "GEEKSFORGEEKS\n"; 

it was allocated in the memory like below:

[G][E][E][K][S][F][O][R][G][E][E][K][S][\n][\0]

The program will crash because you have a redeclaration of ch variable, as well there is no need to initialize the char ch = 'G'; since you're overriding it in the while loop and it will take str[j], and so you started iterating at j = 0 which the 1st index in the array [G], as you're incrementing the loop will go until the null character [\0] and stop because there's no iteration after the NULL, in other examples you might see the following condition in the loop: while(str[j] != '\0') which is similar to your condition but just more specific.

You can gain more performance by iterating through the pointer just like the following:

#include <ctype.h> 
#include <stdio.h> 

int main() 
{
    char *str = "GEEKSFORGEEKS\n";

    while (*str)
        putchar(tolower(*str++));

    return 0; 
}

Upvotes: 2

desu
desu

Reputation: 64

the while loop can be understood as "while this string has characters" and as known in C strings or an array of chars contain a '\0' => Null character, in the end, once the while loop achieves it, it will stop the iteration.

So yeap! you are right.

Upvotes: 2

Related Questions