Найти размер строки, на которую указывает указатель

#include <stdio.h>

int main ()
{
    char *ptr = "stackoverflow"

}

Есть ли способ найти длину stackoverflow, на которую указывает ptr, поскольку sizeof ptr всегда дает 4

Ответ 1

  1. sizeof() возвращает размер, необходимый типу. Поскольку тип, который вы передаете sizeof в этом случае, является указателем, он возвращает размер указателя.

    Если вам нужен размер данных, указываемых указателем, вам придется запомнить его, сохраняя его явно.

  2. 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 */
}