All Exams Test series for 1 year @ ₹349 only
Question

Consider the following C program segment.

#include <stdio.h>

int main()
{
  char s1[7] = "1234";
    char *p;

    p = s1 + 2;
    *p = '0';

    printf("%s", s1);

    return 0;
}

What will be printed by the program?

The correct answer is

1204

Analyzing the C Program Segment and Output

The provided C program segment demonstrates how pointers can be used to access and modify elements within a character array, which is commonly used to represent strings in C. Let's break down the program step by step to understand its execution and determine the final output.

Step-by-Step Program Execution Analysis

  1. Declaration and Initialization:

    char s1[7] = "1234";

    This line declares a character array named s1 with a size of 7. It is initialized with the string literal "1234". When a character array is initialized with a string literal, the characters of the literal are placed in the array, followed by a null terminator character '\0'. Since the size of the array (7) is larger than the length of the string "1234" (4 characters + 1 null terminator = 5), the array will contain:

    Index 0 1 2 3 4 5 6
    Content '1' '2' '3' '4' '\0' ? ?

    The '?' denotes uninitialized or garbage values in the remaining memory locations within the array s1.

  2. Pointer Declaration:

    char *p;

    This declares a character pointer named p. A pointer variable stores the memory address of another variable, in this case, the address of a character.

  3. Pointer Assignment using Pointer Arithmetic:

    p = s1 + 2;

    This is where pointer arithmetic comes into play. s1 represents the base address of the array s1 (which is the address of s1[0]). Adding an integer n to an array name (or a pointer) results in a pointer that points n elements away from the original address, considering the size of the data type. Since s1 is a char array, s1 + 2 calculates the address that is 2 character sizes away from the start of s1. This address corresponds to the memory location of s1[2]. So, pointer p now points to s1[2], which currently holds the character '3'.

  4. Modifying Array Content using Pointer:

    *p = '0';

    The expression *p refers to the value at the memory address pointed to by p. Since p points to s1[2], this line changes the value stored at s1[2] from '3' to '0'.

    The array s1 now becomes:

    Index 0 1 2 3 4 5 6
    Content '1' '2' '0' '4' '\0' ? ?
  5. Printing the String:

    printf("%s", s1);

    The printf function with the %s format specifier is used to print a string. It starts printing characters from the memory address provided (which is the beginning of the array s1) and continues until it encounters a null terminator character ('\0').

    The function will print:

    • s1[0] which is '1'
    • s1[1] which is '2'
    • s1[2] which is '0' (the modified value)
    • s1[3] which is '4'
    • It encounters s1[4] which is '\0', so printing stops.

Therefore, the output printed by the program will be "1204".

Revision Table: Key C Concepts

Concept Description
Character Array (String) An array of characters used to store sequences of characters. Strings in C are null-terminated, meaning they end with a '\0' character.
String Initialization Initializing a char array with a string literal automatically includes the null terminator. The array size should be large enough to hold all characters plus the null terminator.
Pointer A variable that stores the memory address of another variable. A char * stores the address of a character.
Pointer Arithmetic Operations like addition or subtraction on pointers. Adding an integer n to a pointer moves the pointer n times the size of the pointed-to data type. arrayName + n is equivalent to &arrayName[n].
Dereferencing Pointer Using the * operator before a pointer variable (e.g., *p) accesses the value stored at the memory address the pointer holds.
printf("%s", ...) Prints a string starting from the given address until a null terminator ('\0') is found.

Additional Information on C Strings and Pointers

Strings in C are fundamentally arrays of characters. The null terminator '\0' is crucial because it marks the end of the string, allowing functions like printf("%s", ...) and strlen() to know where the string ends. Without the null terminator, these functions would continue reading memory until they accidentally find a zero byte, potentially leading to errors or crashes.

Pointers are extremely powerful in C for manipulating strings and arrays efficiently. Pointer arithmetic provides a concise way to move through arrays. For example, iterating through a string can be done by incrementing a character pointer: p++ moves the pointer to the next character.

Modifying a string using a pointer, as shown in the example, directly changes the content of the underlying character array. This is a common technique in C string manipulation. However, it's important to be careful not to write beyond the bounds of the array, which can cause buffer overflows and security vulnerabilities.

In this specific program, s1 + 2 correctly calculates the address of the third element (index 2) because s1 decays to a pointer to its first element in this context, and adding 2 performs pointer arithmetic based on the size of a char.

Was this answer helpful?

Important Questions from Array

  1. Which of the following initialization statement store six integer values in array?

  2. Which of the following expression will delete the entire array pointed to by q?

  3. #include <stdio.h>
    
    void foo(int *p, int x){
        *p = x;
    }
    
    int main(){
        int *z;
        int a = 20, b = 25;
        z = &a;
        foo(z, b);
        printf("%d", a);
        return 0;
    }
    
    The output of the given C program is __________. (Answer in integer)
  4. Consider an array $A$ of integers of size $n$. The indices of $A$ run from 1 to $n$. An algorithm is to be designed to check whether $A$ satisfies the condition given below.

    $\forall i,j \in \{1, \dots, n-1\}$ such that $i > j$, $(A[i + 1] - A[i]) > (A[j + 1] - A[j])$

    Which one of the following gives the worst case time complexity of the fastest algorithm that can be designed for the problem?
  5. What is the output the given C language code snippet? 

    #include<stdio.h>

     int main()

    {

     int x[] = {10,20,30}; 

    int *p = x; 

    p++; 

    printf("%d",*p); 

    return 0; 

    }

Need Expert Advice?

Start Your Preparation with Prepp Mobile App

Download the app from Google Play & App Store
Download the app from Google Play & App Store
Prepp Mobile App