LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1825|回复: 15

itoa这个东东

[复制链接]
发表于 2005-9-14 10:38:50 | 显示全部楼层 |阅读模式
我看有的书上提到过它。我也看到资料说这不被ANSI C支持,可以用sprintf来替用。itoa这么用用的东东,居然没有,奇怪;它的亲戚atoi就被承认了。
有没有其它代替品?
发表于 2005-9-14 10:44:40 | 显示全部楼层
代替品不就是sprintf么?功能比itoa又强。
如果实在觉得sprintf参数多了点,自己写一个也就行了,很简单的函数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-14 11:19:04 | 显示全部楼层
Post by gamedragon
代替品不就是sprintf么?功能比itoa又强。
如果实在觉得sprintf参数多了点,自己写一个也就行了,很简单的函数。

sprintf可以接收数量不同的参数,三个参数就够用了。多乎哉?不多也。
有时候会有这种情况:

  1. char str[MAX_LEN];
  2. memset(str, 0, sizeof (str));
  3. strncat(str, some_str, strlen(some_str));
  4. //这时要往str里写一个int型对应的char型,如'918',怎么用sprintf呢?我一般这么作:
  5. char temp[ANOTHER_LEN];
  6. memset(temp, 0, sizeof(temp));
  7. sprintf(temp, ”%d", 1931);
  8. strncat(str, temp, strlen(temp));
  9. //略显烦琐。各位有何高见改进?
  10. //如果有itoa,那就直接 strcat(str, itoa(int_var));  hoho
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-9-14 13:26:41 | 显示全部楼层
memset干嘛用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-14 15:58:25 | 显示全部楼层
Post by x11
memset干嘛用

全置0,相当于 XOR AX, AX
我习惯用memset对字符串初始化置0,因为有的编译平台下字符串的默认值不是0(比如VC6)。
回复 支持 反对

使用道具 举报

发表于 2005-9-14 16:13:14 | 显示全部楼层
Post by Illidan
sprintf可以接收数量不同的参数,三个参数就够用了。多乎哉?不多也。
有时候会有这种情况:

  1. char str[MAX_LEN];
  2. memset(str, 0, sizeof (str));
  3. strncat(str, some_str, strlen(some_str));
  4. //这时要往str里写一个int型对应的char型,如'918',怎么用sprintf呢?我一般这么作:
  5. char temp[ANOTHER_LEN];
  6. memset(temp, 0, sizeof(temp));
  7. sprintf(temp, ”%d", 1931);
  8. strncat(str, temp, strlen(temp));
  9. //略显烦琐。各位有何高见改进?
  10. //如果有itoa,那就直接 strcat(str, itoa(int_var));  hoho
复制代码

其实可以建一个自己的库,有一些常用的而又不直接提供的功能都放在里面
回复 支持 反对

使用道具 举报

发表于 2005-9-15 11:39:53 | 显示全部楼层
Post by Illidan
sprintf可以接收数量不同的参数,三个参数就够用了。多乎哉?不多也。
有时候会有这种情况:

  1. char str[MAX_LEN];
  2. memset(str, 0, sizeof (str));
  3. strncat(str, some_str, strlen(some_str));
  4. //这时要往str里写一个int型对应的char型,如'918',怎么用sprintf呢?我一般这么作:
  5. char temp[ANOTHER_LEN];
  6. memset(temp, 0, sizeof(temp));
  7. sprintf(temp, ”%d", 1931);
  8. strncat(str, temp, strlen(temp));
  9. //略显烦琐。各位有何高见改进?
  10. //如果有itoa,那就直接 strcat(str, itoa(int_var));  hoho
复制代码

用指针就行了!
memcpy(str+strlen(str),temp,sizeof(temp))
回复 支持 反对

使用道具 举报

发表于 2005-9-15 12:24:18 | 显示全部楼层
Post by Illidan
全置0,相当于 XOR AX, AX
我习惯用memset对字符串初始化置0,因为有的编译平台下字符串的默认值不是0(比如VC6)。

这个习惯。。。
在你举例的语句中不是多此一举么
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-15 21:59:09 | 显示全部楼层
Post by x11
这个习惯。。。
在你举例的语句中不是多此一举么

如果字符串默认的初始值不是0x0而又不手工置0,那strlen()是不是会出问题?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-15 22:05:12 | 显示全部楼层
Post by haohao_h
用指针就行了!
memcpy(str+strlen(str),temp,sizeof(temp))

这个主意好。
习惯汇编的风格的人眼中的一切都是无差别的一般内存,最先想到的肯定是这个用法,hoho(我原以为memcpy是system call,不料竟是library call……)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表