LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: Illidan

itoa这个东东

[复制链接]
发表于 2005-9-16 09:03:30 | 显示全部楼层
Post by haohao_h
用指针就行了!
memcpy(str+strlen(str),temp,sizeof(temp))

这种写法有点意思,呵呵。。。!
回复 支持 反对

使用道具 举报

发表于 2005-9-16 09:32:14 | 显示全部楼层
Post by haohao_h
用指针就行了!
memcpy(str+strlen(str),temp,sizeof(temp))

算我愚钝,这种写法还是先要有个sprinf的过程啊,只是将最后的strcat函数用strcpy代替,不知有何优点呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-16 10:09:41 | 显示全部楼层
Post by rickxbx
算我愚钝,这种写法还是先要有个sprinf的过程啊,只是将最后的strcat函数用strcpy代替,不知有何优点呢?

啊是啊,memcpy也只是strcpy的泛化,都忘了int-to-char的转换还没有做呢……比如30要转成0x31和0x30。hoho。int-2-char还得sprintf啊,要不就得自己打包出一个小库来。
回复 支持 反对

使用道具 举报

发表于 2005-9-18 09:03:34 | 显示全部楼层
[PHP]sprintf(str+strlen(str),"%d",1931);[/PHP]

保险起见,最好先判断一下要写入的加上本来的长度是不是超出最大允许长度了
回复 支持 反对

使用道具 举报

发表于 2005-9-23 16:19:45 | 显示全部楼层
char* itoa(int count)
{
   int i,m,j;
   char* buffer;
   if(count<0)
     {
        count=-count;
         }
   m=count;
  for((i=m?1:2);m>0;i++)
     {
        m = m/10;
           }
    j=i;
    buffer=(char*)malloc(i);
         m=count;
        i=i-2;
      do
       {
         *(buffer+i)=(int)((m%10)+'0');
          m=m/10;
          i--;
       }while(m!=0);

        *(buffer+j-1)='\0';
      return buffer;
}
回复 支持 反对

使用道具 举报

发表于 2005-9-27 22:10:56 | 显示全部楼层
用不着memset...
char buffer[BUFSIZ];
int n;

n = snprintf(buffer, BUFSIZ, "%d", 1234);
buffer[n] = 0;
...

snprintf is much safer than sprintf

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
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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