I am trying to output the length of a string using strlen(). But I want to do it through a pointer.
Here's what I tried: `
#include <stdio.h>
#include <string.h>
int main()
{
char a[]="wel";
int *p;
p=&a;
printf("%d\n",strlen(*p));
}
The image shows the error I am getting while compiling:
Then made this change in the code declaration of *p to *p[]:
#include <stdio.h>
#include <string.h>
int main()
{
char a[]="wel";
int *p[];
p=&a;
printf("%d\n",strlen(*p));
}
But then I am getting an error "storage size of 'p' isn't known." What am I still missing?
CodePudding user response:
Except in a couple of limited circumstances (noteably sizeof), an array degrades into a pointer to its first element when used. So this is what you need:
char *p = a; // Same as `p = &(a[0])`
printf( "%zu\n", strlen( p ) );
Note that strlen returns a size_t, and %zu is the correct format specifier for that.
CodePudding user response:
The declaration of the array a initialized with a string literal
char a[]="wel";
is equivalent to
char a[4]="wel";
So the expression &a has the type char ( * )[4] but the pointer p has the type int *
int *p;
and there is no implicit conversion between the pointer types.
And again the function strlen expects a pointer of the type char * but you are passing an expression of the type int
printf("%d\n",strlen(*p));
Also the return type of the function strlen is size_t. So at least you have to use the conversion specifier zu instead of d in the call of printf.
It seems what you mean is the following
#include <stdio.h>
#include <string.h>
int main()
{
char a[]="wel";
char *p;
p = a;
printf( "%zu\n",strlen( p ) );
}
In this assignment statement
p = a;
the array a used in the right hand side expression is implicitly converted to pointer to its first element of the type char *.
As for the second program then you declared an array of pointers without specifying the number of elements
int *p[];
Such a declaration is invalid.
And moreover arrays do not have the assignment operator that you are trying to use
p=&a;
So the second program in whole does not make sense.
CodePudding user response:
p is not a string, it is the pointer to type int. Why just not use
printf("%d\n",strlen(a));
Then use
char a[4]="wel";
