字符串 - C语言中为什么经常需要参数用来指明字符指针长度?

查看:171
本文介绍了字符串 - C语言中为什么经常需要参数用来指明字符指针长度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如下面的例子:

int zend_hash_add(
    HashTable *ht,       
    char *arKey,            
    uint nKeyLen,       
    void **pData,        
    uint nDataSize,
    void *pDest            
);

zend_hash_add(fooHashTbl, "bar", sizeof("bar"), &barZval, sizeof(zval*), NULL);

为什么需要nKeyLen参数?因为感觉每次传的参数都是sizeof(arKey),为什么不在函数内部处理呢?是不是有什么需要特殊处理的?

解决方案

对于字符数组,sizeof给出来的是数组长度,对于字符指针,sizeof给出来的是指针的宽度。
如果你在这个函数内部处理,你得到的就只是指针变量的大小,不可能得到字符串长度。
字符串长度使用strlen。
如果你能确保字符串永远正确地以\0结尾,可以使用strlen而不再传递长度。

char *str="hello"; // sizeof(str) == 8, 在64位系统上;32位系统是4
char str[]="hello"; // sizeof(str) == 6
char str[10]="hello"; // sizeof(str) == 10

这篇关于字符串 - C语言中为什么经常需要参数用来指明字符指针长度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆