vc++程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 06:25:46
以下这个程序主要是想调用函数实现计算字符串长度。我想问的是:数组能这样作为函数的参数吗?还有就是,这个程序的计算结果为什么不是4,而是15呢?我的数组总长度都没超过15····

#include"stdio.h"
#include"string.h"
int len(char *s)
{
int i;
for(i=0;i<4;i++)
{
s[i]='a';
}

return strlen(s);
}
void main()
{
char data[12];

printf("%d",len(data));
}
谁能告诉我怎么让计算结果显示正确呀····

哈哈。。。受不了了,本来不想说话的。。。

先声明哈,为什么是15我也不知道,但是有些人说的太夸张了,首先你把数组传给一个指针,可以,甚至你都可以这么些int len(char s[1000]),你就是在中括号里写再多的东西也没用,该是15还是15,因为她就作为一个指针被传进来了,这是数组传参的限制(为啥这样我也不清楚)。其次你结果不是4的原因是你没有在s赋值之后给最后一位设为'\0'字符串结束符。

另外!数组和指针在用法上有些是可以通用的,但是千万别瞎通用!!最简单的例子,你可以把指针变量指向另外一段区域,你数组变量可以么?

这样是可以的,不过不建议这么做
至于返加字符串长度是4,可能data[12]中的值被初始化为'\0',
strlen(char * str)中参数str是以'\0'结束的字符串,函数返回'\0'之前的字符的个数!

数组和指针是共通的概念。只不过数组通常是已知、固定长度,而指针是未知长度的。

从内存结构就可以很好的理解这个问题,因为数组就是一串连续的内存,数组变量本身就指向这段内存的开头,而指针也是同样的道理。

从内存结构就可以很好的理解这个问题,因为数组就是一串连续的内存,数组变量本身就指向这段内存的开头,而指针也是同样的道理。知道了吧!

喂,楼上的那些,你们言辞坐坐的回答,把这个东西弄到VS调试没啊?调试调试看看你们还那样说不

1)
int len(char *s)
{
int i;
for(i=0;i<4;i++)
{
s[i]='a';
}

return strlen(s);
}
//这样的函数定义是错的,数组是不能当做参数传递的,传到函数中,只能被解释为指针,不存在传递数组参数这一说法。要让函数处理一个数组,一般是需要传递两个参数,一个是指针,另外一个是数组元素个数。重定义为:
int len(char* s, int num);