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 expression will delete the entire array pointed to by q?

  2. #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)
  3. 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?
  4. 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