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

时间:2014-04-07 18:05:35

标签: c string-literals string-length

以下代码与计算字符串长度

有关
#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时,我将一个字符串文字分配给指针而不是指针的字符串文字的地址,但事实证明该地址已存储。指针如何存储&#34; hah&#34;没有指定地址?

2 个答案:

答案 0 :(得分:1)

"hah"属于type char[]所以当你将它传递给函数时,它会衰减指向它的第一个元素,就像任何其他数组一样。

答案 1 :(得分:0)

您首先不需要指定地址 - 您已键入str("hah");而非strl("hah");(编写函数时相同) - 字符串文字在函数的堆栈内存中将actaully计数为变量,并将内存分配给它。更重要的是,当以这种方式指定字符串文字时:

char* str = "hah";
char* sstr = "hah";
打印时

printf("%d %d", str, sstr);
你得到的号码相同。使用字符串文字 - 编译器在内存中搜索相同的字符串,如果它不在那里 - 它会为它分配内存。在这种情况下 - WAS字符串相同,因此指针指向的地址将是相同的。 正确的程序将是这样的:

#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