C Programming - Strings - Discussion

Discussion Forum : Strings - Point Out Correct Statements (Q.No. 2)
2.
Which of the following statements are correct about the below declarations?
char *p = "Sanjay";
char a[] = "Sanjay";
1: There is no difference in the declarations and both serve the same purpose.
2: p is a non-const pointer pointing to a non-const string, whereas a is a const pointer pointing to a non-const pointer.
3: The pointer p can be modified to point to another string, whereas the individual characters within array a can be changed.
4: In both cases the '\0' will be added at the end of the string "Sanjay".
1, 2
2, 3, 4
3, 4
2, 3
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
17 comments Page 1 of 2.

RBJII said:   1 decade ago
@GAURAV.

In *str also the NULL char is added.

For e.g: We undergo to find the length of string

char *str="BALAJI";
int length;
while(*str!='\0')
{
length++;
str++;
}
return(length);

In the above program, it clearly shows that only after detecting the '\0' on *str, the while() condition gets terminates, Hence the NULL char will be default. Don't confuse with Sizeof(). Statement is in both cases the '\0' will be ADDED at the end of the string "Sanjay" is TRUE.

Mangusta said:   1 decade ago
I think there is typo in the second statement:

2: p is a non-const pointer pointing to a non-const string, whereas a is a const pointer pointing to a non-const pointer.

'a' can be considered a constant pointer, pointing to a non-const STRING, not POINTER.

Actually 'a' has type char[7] here, so in reality it is not a pointer, not even constant.

On the other hand, 'p' has type char*, so it is a pointer.

Siyah said:   7 years ago
@All.

The program is to swap the first alphabet of the two strings. Can anyone tell the mistake?


#include<stdio.h>
int main(int argc, char* argv[])
{
char *c;
char *c1;
char *temp;
c=argv[1];
c1=argv[2];
temp[0]=c[0];
c[0]=c1[0];
c1[0]=temp[0];
printf("%s",c);
printf("%s",c1);
return 0;
}

Girish nischel said:   1 decade ago
yeah! i believe that option 3 is wrong because when we declare

char a[]={"girish"};

the entire array is initialised! hence i believe v cannot change the individual element.if v can really change then wt wl b the output for the following?

char a[]={"giri"};
printf("%c",a[2]);

Neeraj said:   1 decade ago
We can chnage the individual characters in a string but not the whole string at a time...eg:
#include<stdio.h>
int main()
{
char str[] ="Visual";
*(str+2)='K';
printf("%s",str);
return 0;
}
similarle,to change other characters ,we can put some other value.

Vinaykumar said:   7 years ago
I think option C is correct. Because in char *p="Sanjay". Pointer p is in stack but that pointer pointing string 'Sanjay" is store in read-only text section. So it is a const string. That too char a[]="Sanjay" in that statement a is not a const pointer. So I think option C is correct.

Gaurav Garg said:   1 decade ago
@Ronil.

I agree with your comment. NULL character will not added at the end of second array string. Because array of string by default added NULL character at the end of string.

For eg:

*str1="GAURAV";
*str2[]="GAURAV";

sizeof (str1) = 6;
sizeof (str2) = 7;

Suresh Dave said:   1 decade ago
Depending on compiler first option(2) may or may not be correct.

In turbo C it stores string pointed by pointer during initialization in data section whereas in gcc its in code section which is read only memory!

Krishna said:   1 decade ago
In first statement the character pointer p stores the address of the string "Sanjay".
The second statement specifies the space for Sanjay characters be allocated and that the name of location is a[].

Harish said:   6 years ago
Option 2 is wrong. Because p is a no constant pointer but it is pointing to the constant string (that string will be stored in the data segment in read only memory location).


Post your comments here:

Your comments will be displayed after verification.