以下代码与计算字符串长度
有关#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;没有指定地址?
答案 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