The Gateway to Computer Science Excellence
0 votes
145 views
#include <stdio.h>

int main(void) {
	char* ar[4];
	scanf("%s",ar[3]);
	printf("%s",ar[3]);
	return 0;
}

char *test1[3]= {"arrtest","ao", "123"};

if one can initialize array like this ,how   can input be taken by using scanf ?

in Programming by Active (1.7k points) | 145 views

1 Answer

+5 votes
char *ar[3]= {"arrtest","ao", "123"}; 

$\rightarrow$ Here $ar$ is an array of character pointers.

$\rightarrow$  In this each character pointer i.e. ar[0] , ar[1] and ar[2] is pointing to the first char of the string constants "arrtest", "ao" and  "123" respectively.

$\rightarrow$ When we execute the above line then first the string constants are created at a memory location and then the pointers start pointing to memory location of the first character of each of the string constants.


char* ar[4];
	scanf("%s",ar[3]);

This will not work. why ?

$\rightarrow$ Because first you are creating an array of character pointers and since they are not initialized so they are pointing to nothing.(i.e. not pointing to any memory location)

$\rightarrow$ So when you write $ar[3]$ in $scanf$ , $a[3]$ will not provide any address location to $scanf$. ($\because$ a[3] is not pointing to any memory location.)

$\rightarrow$So if $scanf$ takes the input then where will it store the input ?


$\rightarrow$ In order to correct it you should first dynamically create a memory location and make the pointer point to that memory location.

$\rightarrow$ So that when you take the input using $scanf$ then the value will be stored at that memory location which you created at which the pointer is pointing.

char* ar[3];
ar[0] = (char*) malloc(20); //char*  is doing typecasting.
ar[1] = (char*) malloc(20);
ar[2] = (char*) malloc(20);

scanf("%s",ar[0]);
scanf("%s",ar[1]);
scanf("%s",ar[2]);

printf("%s",ar[0]);
printf("%s",ar[1]);
printf("%s",ar[2]);

 

by Boss (21.6k points)
0

Cannot recognise function actually https://ideone.com/zO8aMW

0

@srestha

You are trying to overwrite a string constant which is not correct.

$ar[2]$ is pointing to the memory location where the string constant "123" is stored.

scanf("%s",ar[2]);

so this is trying to overwrite "123" which is a string constant with the input value.

0
no, I just decleared string inside array
0

no, I just decleared string inside array.

They are not string, they are string constants.

In https://ideone.com/zO8aMW

scanf("%s",ar[2]);

This line is trying to overwrite the string constant.

Related questions

Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true
50,647 questions
56,497 answers
195,491 comments
100,822 users