• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

C字符串传参为什么要在外面计算长度?

day_day 2018-08-24 浏览量:680
例如下面这个例子:
很多都是这样传参的,不懂为什么,在调用的函数里面再sizeof不行吗?strlen呢?
int one(void){
    char str[20];
    int len;

    len = sizeof(str)/sizeof(str[0]);//len = strlen(str);
    two(strlen);
}

int two(char *str int len){
    int i;
    for(i=0;i<len;i++)
    {
        printf("%c"str[t]);
    }
}

int one(void){
    char str[20];

    two(str);
}

int two(char *str){
    int i;

    int len;

    len = sizeof(str)/sizeof(str[0]);
//len = strlen(str);
for(i=0;i<len;i++) { printf("%c"str[t]); } }

                        
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • sizeof获取数组占用内存数量必须直接针对数组名,而不能是指向数组的指针,那样只能获得指针的宽度,而不是数组的内存用量。


    切记:指针和数组名不能划等号。

    • 发布于 2018-08-24
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:10
  • 后面这种做法,sizeof获得的是字符指针str的数据长度,而不是你要的字符串数组的长度。
    • 发布于2018-08-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 字符串长度与指针大小不同,而且指针与数组是两个不同 的概念
    • 发布于2018-08-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 后面那个不对,后面那个是指针,传参的时候是穿地址进去的,所以str保存的是地址
    • 发布于2018-08-24
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个长度len必须在函数执行之前保存,因为如果把数组名传进去函数的话,传进去的东西就成了数组地址,而不是数组本身了,数组地址的长度一定是4。

    • 发布于2018-08-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 前面那种方法是将数组的真实长度传入了,后面那种是传的一个地址的长度,32位系统地址长度是确定的4,没有意义
    • 发布于2018-08-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 后面这种用法其实是传递了这个数组的长度,保存的并不是一个对应的地址
    • 发布于2018-08-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 不这样容易造成可利用漏洞,典型的缓冲区溢出漏洞
    • 发布于2018-09-07
    • 举报
    • 评论 0
    • 0
    • 0

  • 这样是保证你的数据能够正确的传输,做了一级保护
    • 发布于2018-09-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 是为了安全的操作而设计的,这样可以保证你的参数可以做一个校验
    • 发布于2018-09-22
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

C字符串传参为什么要在外面计算长度?