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.

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).

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.

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;
}

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.

Anusha said:   1 decade ago
I'm not understanding any answer please explain clearly.

Jahnavi said:   1 decade ago
I'm not understsanding second option please explain.

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!

Kaustav said:   1 decade ago
"a" is not a pointer. It is declared as char.

Ahok said:   1 decade ago
What is the meaning of second statement given in the question?

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;


Post your comments here:

Your comments will be displayed after verification.