是否有更好,更短,更容易阅读的以下代码版本:

char ar[100];

int main() {
    //ar = "hello"; doesn't compile
    ar[0] = 'h';
    ar[1] = 'e';
    ar[2] = 'l';
    ar[3] = 'l';
    ar[4] = 'o';
    ar[5] = '\x00';
    return 0;
}


注意:ar的类型必须为char[100]
“真实”程序是:

#include <string>
#include <cstdarg>

#define TO_STRING_BUF_SIZE 100

char toStringBuf[TO_STRING_BUF_SIZE];

std::string toCptr_(const char * format, ...) {
  va_list argzeiger;
  va_start(argzeiger, format);
  int16_t ret = vsnprintf(toStringBuf, TO_STRING_BUF_SIZE, format, argzeiger);
  if(ret >= TO_STRING_BUF_SIZE - 1) {
    //toStringBuf = "buffer too small";
  } else if(ret < 0) {
    //toStringBuf = "encoding error";
  }
  va_end(argzeiger);
  std::string returning(toStringBuf);
  return returning;
}

最佳答案

使用strncpy(),例如:

strncpy(toStringBuf, str_buf, TO_STRING_BUF_SIZE);
toStringBuf[TO_STRING_BUF_SIZE-1] = 0;


不要使用strcpy(),因为它是C / C ++中最经典的众所周知的不安全函数之一。它可能在缓冲区末尾写入数据,从而导致缓冲区溢出错误。在您的特定示例中这不是问题,但通常仍应避免。

07-24 13:53