[英]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.