Найти размер строки, на которую указывает указатель
#include <stdio.h>
int main ()
{
char *ptr = "stackoverflow"
}
Есть ли способ найти длину stackoverflow, на которую указывает ptr, поскольку sizeof ptr всегда дает 4
Ответы
Ответ 1
-
sizeof()
возвращает размер, необходимый типу. Поскольку тип, который вы передаете sizeof в этом случае, является указателем, он возвращает размер указателя.
Если вам нужен размер данных, указываемых указателем, вам придется запомнить его, сохраняя его явно.
-
sizeof()
работает во время компиляции. поэтому sizeof(ptr)
обычно return 4 or 8 bytes
. Вместо этого используйте strlen
.
Ответ 2
Используйте strlen для поиска длины (количества символов) строки
const char *ptr = "stackoverflow"
size_t length = strlen(ptr);
Еще один незначительный момент, обратите внимание, что ptr
- строковый литерал (указатель на константную память, который нельзя изменить). Его лучшая практика объявить его как const, чтобы показать это.
Ответ 3
Функция strlen()
предоставляемая string.h
дает вам, сколько "реальных символов" содержит строку, указанную аргументом. Однако эта длина не включает завершающий нулевой символ '\0'
; вы должны учитывать это, если вам нужна длина для выделения памяти.
Это 4 байта - это размер указателя на char на вашей платформе.
Ответ 4
Вы можете попробовать:
char *ptr = "stackoverflow"
size_t len = strlen(ptr);
Ответ 5
Вы ищете функцию strlen()
.
Ответ 6
#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);
}
простой код для понимания
Ответ 7
если длина 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);
Ответ 8
Чисто используя указатели, вы можете использовать арифметику указателя:
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 */
}