找到指针指向的字符串的大小

Man*_*anu 19 c

#include <stdio.h>

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

}
Run Code Online (Sandbox Code Playgroud)

有没有办法找到ptr指向的stackoverflow的长度,因为sizeof ptr总是给出4

sim*_*onc 39

使用strlen查找字符串的长度(字符数)

const char *ptr = "stackoverflow"
size_t length = strlen(ptr);
Run Code Online (Sandbox Code Playgroud)

另一个小问题,请注意这ptr是一个字符串文字(指向const内存的指针,无法修改).将它声明为const以表明这一点的更好的做法.

  • +1 表示两个良好实践,将字符串文字分配给 `const char *` 和使用 `size_t` (2认同)
  • 事实上 - 只是要小心,如果目标不是以 null 结尾的字符串,则会进行测量,直到它在内存中随机找到 null,或在搜索过程中触发内存保护错误。当然(正如其他人指出的那样)返回值不包括终止 null 的大小。 (2认同)

imm*_*odi 16

  1. sizeof()返回类型所需的大小.由于在这种情况下传递给sizeof的类型是指针,因此它将返回指针的大小.

    如果您需要指针指向的数据大小,则必须通过显式存储它来记住它.

  2. sizeof()在编译时工作.所以,sizeof(ptr)return 4 or 8 bytes一般.而是使用strlen.


小智 7

#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);
}
Run Code Online (Sandbox Code Playgroud)

简单易懂的代码


eff*_*ffe 5

strlen()提供的函数string.h为您提供参数指向的字符串包含多少"真实字符".但是,此长度不包括终止空字符'\0'; 如果你需要长度来分配内存,你必须考虑它.

这4个字节是平台上指向char的指针的大小.