一个比较难以理解的strlen问题
main()
{
char *a[50] ;
strlen(a) ;
}
怎么 = 4啊,不是=0吗
[解决办法]
你这么写取的是指针的长度,而不是字符串的长度,32位机子 4字节刚好 strlen(*a)这才是你要的
[解决办法]
象LZ这么写 编译能过? 神奇....
[解决办法]
因为*a[50]没初始化,值不确定。
char *a[50] ;
a[0]=NULL;
strlen((const char *)a) ;
这样就是0了
[解决办法]
strlen(const char *str)
a是一个指针数组的首地址,并不是指向字符串的地址
[解决办法]
你是不是要使用 sizeof(a) ?
[解决办法]
main()
{
char *a[50] ;
strlen(a) ;
}
怎么 = 4啊,不是=0吗
首先strlen(a);不合法
即使使用强制转换将a转换为char*
strlen((char*)a);
在逻辑上也是毫无意义的 当a[0]=NULL时strlen((char*)a)的确=0
a实际上是一个2级指针,现在把它强制转换成一个1级针,a[0]的内容本来是个地址,强制转换后a[0]内容含义就是个char了,把一个随机的32地址转换为char是毫无意义的
[解决办法]
对于strlen来说,a不是二级指针。仅仅是个地址。
对于用数组名或指针变量做实参的区别,某高人有过讲解……忘了在哪了……