简单问题。函数调用!!!
时间:2011-12-03
来源:互联网
代码是Linux,函数itoa是用户自定义的,不是系统的。
void itoa(int i, char* string, int len)//取前len位将整数转为字符串
{
int power, j;
j = i;
for(power = 1; j >= 10; j /= 10)
power *= 10;
for(; power && len; power /= 10)
{
*(string++) = '0' + i/power;
i %= power;
len--;
}
*string = '\0';
}
调用的时候
char sem_name[SEM_NAME_SIZE];
time_t seed = time(NULL);
srand((int)seed);
int id = rand();//获得随机数
itoa(id, sem_name + strlen(GBN_MUTEX), SEM_SUFFIX_SIZE);
这里的itoa的第二个参数sem_name + strlen(GBN_MUTEX),sem_name不是字符串么??怎么和strlen的返回值相加???上面调用的时候最后一部分谁能给我解释一下,越详细越好!!!谢谢
void itoa(int i, char* string, int len)//取前len位将整数转为字符串
{
int power, j;
j = i;
for(power = 1; j >= 10; j /= 10)
power *= 10;
for(; power && len; power /= 10)
{
*(string++) = '0' + i/power;
i %= power;
len--;
}
*string = '\0';
}
调用的时候
char sem_name[SEM_NAME_SIZE];
time_t seed = time(NULL);
srand((int)seed);
int id = rand();//获得随机数
itoa(id, sem_name + strlen(GBN_MUTEX), SEM_SUFFIX_SIZE);
这里的itoa的第二个参数sem_name + strlen(GBN_MUTEX),sem_name不是字符串么??怎么和strlen的返回值相加???上面调用的时候最后一部分谁能给我解释一下,越详细越好!!!谢谢
作者: yuncha299792458 发布时间: 2011-12-03
itoa() 的第二个参数是字符指针,也就是一个地址,sem_name + strlen(GBN_MUTEX)相当于是将sem_name字符串的第strlen(GBN_MUTEX)个字符的地址传给itoa(),itoa()的处理时就按这个位置当做字符串的开始的位置
作者: feiyuren 发布时间: 2011-12-03
看看指针基础知识吧
作者: sduxiaoxiang 发布时间: 2011-12-03
这里数组名 本身相当于指针
这里sem_name表示的是数组sem_name[SEM_NAME_SIZE]的首地址 跟这个&sem_name[0]是一样的。
sem_name + strlen(GBN_MUTEX)等于&sem_name[0]向后偏移strlen(GBN_MUTEX)后的地址
你上面的程序还不如用这个
void CtestlibDlg::itoa_loc(char *buf, int data)
{
char tbf[256] = {0};
char *pf = tbf;
char *ps = buf;
int a = 0;
int b = 0;
a = data%10;
b = data/10;
*pf++ = 0;
while(b != 0)
{
*pf++ = (char)a+0x30;
a=b%10;
b = b/10;
}
*pf = (char)a+0x30;
while(*pf != 0)
{
*ps++ = *pf--;
}
*ps = 0;
}
这里sem_name表示的是数组sem_name[SEM_NAME_SIZE]的首地址 跟这个&sem_name[0]是一样的。
sem_name + strlen(GBN_MUTEX)等于&sem_name[0]向后偏移strlen(GBN_MUTEX)后的地址
你上面的程序还不如用这个
void CtestlibDlg::itoa_loc(char *buf, int data)
{
char tbf[256] = {0};
char *pf = tbf;
char *ps = buf;
int a = 0;
int b = 0;
a = data%10;
b = data/10;
*pf++ = 0;
while(b != 0)
{
*pf++ = (char)a+0x30;
a=b%10;
b = b/10;
}
*pf = (char)a+0x30;
while(*pf != 0)
{
*ps++ = *pf--;
}
*ps = 0;
}
作者: superquan1985 发布时间: 2011-12-03
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28