【问题标题】:fill a buffer successively依次填充缓冲区
【发布时间】:2011-02-20 02:20:20
【问题描述】:

我打算在 for 循环中连续填充一个字符指针数组。要填写的内容是一个整数,所以我需要强制转换。但我没有得到我想要的结果..

for (i=0;i<max0;i++){
    sprintf(buf, "%d", content[i]);
}

sprintf 替换了hole buf,但我想追加。

for (i=0;i<max0;i++){
   buf[i]=(char) contint[i]
}

但这也不起作用。在我看来,我得到了内容 [i] 的 ascii 代码。

【问题讨论】:

  • 您无法将数字转换为具有预期输出的字符。整数可以是 -2,147,483,648、2,147,483,647 或介于两者之间的任何值(假设此处为 32 位)。一个字符只适合 0 - 255 (-128 - 127)。
  • 值触发0 / 1

标签: c string pointers char printf


【解决方案1】:

我认为这听起来很傻,但我对你的代码进行了如下调整:-

for (i=0;i<max0;i++){ 
   buf[i]=(char) (48+ contint[i]);
} 

//这里48是0的ascii码

【讨论】:

    【解决方案2】:

    我使用 snsprintf 解决了它

    for (i=0;i<max0;i++){
       length += snprintf(buf+length, buflen-length, "%d", content[i]);
    }
    

    感谢您的回答!!

    【讨论】:

    • snprintf 的第二个参数是无符号的 (size_t),这意味着如果 length > buflen,那么 buflen-length 将下溢,并且 snprintf 将愉快地写入缓冲区之外创建缓冲区溢出。请注意,snprintf 的返回值等于如果有足够的空间可用时将写入的字节数,而不是实际写入的字节数。
    【解决方案3】:

    sprintf 返回写入的字符数。您可以利用它来将整数附加到缓冲区。

    类似:

    int pos = 0;
    for (i=0;i<max0;i++){
       pos += sprintf(buf+pos, "%d", content[i]);
    }
    

    【讨论】:

    • 是的,我会试试 snprintf。谢谢 :D.. 有时第一个想法是最好的。该死的:)
    【解决方案4】:

    您可以使用指针算法来完成此操作:

    char *p = buf;
    for (i=0;i<max;i++)
    {
          int num_written = sprintf(p, "%d", content[i]);
          if(num_written == -1)
          { 
           //error handling 
           break;
          }
    
          p += num_written;
    }
    

    【讨论】:

      【解决方案5】:

      使用这个:

      for (i=0; i<max0; ++i){
        sprintf(buf, "%d", content[i]);
        strcat(resultbuf, buf);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-02-21
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 2021-12-22
        • 2017-01-05
        相关资源
        最近更新 更多