#include <stdio.h>
int main ()
{
char *ptr = "stackoverflow"
}
Есть ли способ найти длину stackoverflow, на которую указывает ptr, поскольку sizeof ptr всегда дает 4
#include <stdio.h>
int main ()
{
char *ptr = "stackoverflow"
}
Есть ли способ найти длину stackoverflow, на которую указывает ptr, поскольку sizeof ptr всегда дает 4
sizeof()
возвращает размер, необходимый типу. Поскольку тип, который вы передаете sizeof в этом случае, является указателем, он возвращает размер указателя.
Если вам нужен размер данных, указываемых указателем, вам придется запомнить его, сохраняя его явно.
sizeof()
работает во время компиляции. поэтому sizeof(ptr)
обычно return 4 or 8 bytes
. Вместо этого используйте strlen
.
Используйте strlen для поиска длины (количества символов) строки
const char *ptr = "stackoverflow"
size_t length = strlen(ptr);
Еще один незначительный момент, обратите внимание, что ptr
- строковый литерал (указатель на константную память, который нельзя изменить). Его лучшая практика объявить его как const, чтобы показать это.
Функция strlen()
предоставляемая string.h
дает вам, сколько "реальных символов" содержит строку, указанную аргументом. Однако эта длина не включает завершающий нулевой символ '\0'
; вы должны учитывать это, если вам нужна длина для выделения памяти.
Это 4 байта - это размер указателя на char на вашей платформе.
Вы можете попробовать:
char *ptr = "stackoverflow"
size_t len = strlen(ptr);
Вы ищете функцию strlen()
.
#include<stdio.h>
main()
{
int mystrlen(char *);
char str[100];
char *p;
p=str;
printf("Enter the string..?\n");
scanf("%s",p);
int x=mystrlen(p);
printf("Length of string is=%d\n",x);
}
int mystrlen(char *p)
{
int c=0;
while(*p!='\0')
{
c++;
*p++;
}
return(c);
}
простой код для понимания
если длина ptr является аргументом функции, разумно использовать указатели как строки. мы можем получить длину строки по следующему коду:
char *ptr = "stackoverflow";
length=strlen((const char *)ptr);
И для более подробного объяснения, если строка является входной строкой пользователем с переменной длиной, мы можем использовать следующий код:
unsigned char *ptr;
ptr=(unsigned char *)calloc(50, sizeof(unsigned char));
scanf("%s",ptr );
length=strlen((const char *)ptr);
Чисто используя указатели, вы можете использовать арифметику указателя:
int strLen(char *s)
{
int *p = s;
while(*p !=\0)
{
p++; /* increase the address until the end */
}
Return p – s; /* Subtract the two addresses, end - start */
}