繁体   English   中英

字符串文字和指针在计算字符串长度中的用法

[英]string literal and pointer usage in calculating length of string

下面的代码与计算字符串的长度有关

#include <stdio.h>

int strl (char *s);
main ()
{
  int len1 = str ("hah");
  printf ("%d", len1);
}


int
str (char *s)
{
  int length = 0;
  while (*s != '\0')
    {
      length++;
      s++;
    }

  return (length);
}

当我调用函数str ,我要为指针分配一个字符串文字,而不是给指针分配字符串文字的地址,但事实证明该地址已存储。 指针如何在不指定地址的情况下存储“ hah”的地址?

"hah"类型为 char[]因此,当您将其传递给函数时,它会像其他数组一样衰减到指向其第一个元素的指针。

首先,您不需要指定其地址-您已键入str("hah"); 而不是strl("hah"); (与编写函数时相同)-字符串文字确实确实算作函数堆栈内存中的变量,并且已为其分配内存。 更重要的是,以这种方式指定字符串文字时:

char* str = "hah";
char* sstr = "hah";

打印时:

printf("%d %d", str, sstr);

您会得到相同的号码。 使用字符串文字-编译器会在内存中搜索相同的字符串,如果不存在,则会为其分配内存。 在这种情况下-字符串相同,因此指针指向的地址将相同。 正确的程序将是这样的:

#include <stdio.h>
int strl(char *s);
int main()
{ 
    int len1=strl("hah");
    printf("%d",len1);

    return 0;
}
int strl(char *s)
{
    int length=0;
    while (*s!='\0')
    {
        length++;
        s++;
    }

    return (length);
}

只是将str更改为strl,而将str误认为是strl或相反的:P

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM