首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

linux C一个指针有关问题

2013-01-28 
linux C一个指针问题最近在linux下使用C编程,发现一个问题#includestdio.h#includestring.hint main(v

linux C一个指针问题
  最近在linux下使用C编程,发现一个问题


#include<stdio.h>
#include<string.h>

int main(void)
{
char *a, b[10];
a = b;

printf("sizeof(a) = %lu \n", sizeof(a));
printf("sizeof(b) = %lu \n", sizeof(b));

return 0;
}

结果如下
sizeof(a) = 8 
sizeof(b) = 10 
这么说,在linux下char*长度为8?这个怎么解释,希望高手答复。
并且通过这个简单的测试,发现自己以前在使用memset()的时候有一个大问题。我们知道,memset的使用一般是为了清空字符串(为它置0,如memset(str, 0,sizeof(str))),那么,当str作为char*被当作参数传入一个函数中时,我们怎么使用memset将其清空呢? linux c
[解决办法]
64位机器上指针的长度就是8.清空字符串memset(str, 0, strlen(str));或直接 str[0] = '\0';
[解决办法]
当数组作为参数传入函数时,退化为指针,如main函数中定义char a[20],在main函数中sizeof(a)为20,而把a传入函数后,由于退化为指针,则sizeof(a)变为8,要得到长度参数,应该传入数组名时也传入其长度。当然如果是字符型数组,不传长度也没关系,在子函数中用strlen(a)可以得到数组里字符的个数(不是数组的大小)。
[解决办法]
sizeof(a) //求出的是指针的字节数,32位系统算出为4,64位系统算出为8
sizeof(b) //求出的是数组的字节数,你申请了10位,所以就是10.

热点排行