C++变量没有初始化使用?

Ini*_*nit 0 c++ initialization

我收到此错误:

变量"thename"正在使用而未初始化

这是我的代码:

char *thename;
cm++;
sprintf(thename, "tutmap%d.map", cm);
Run Code Online (Sandbox Code Playgroud)

Fre*_*urk 8

您正在使用该变量而不初始化它,并且运行此代码将是Undefined Behavior.

也许你的意思是:

char thename[42];
cm++;
sprintf(thename, "tutmap%d.map", cm);
Run Code Online (Sandbox Code Playgroud)

如果你有snprintf,这里有一个函数,它证明你保证("断言")缓冲区足够大,但是如果你犯了错误,还要检查缓冲区长度并中止:

template<int N>
void fixed_sprintf(char (&array)[N], char const *format, ...) {
  va_list args;
  va_start(args, format);
  int used = vsnprintf(array, N, format, args);
  va_end(args);
  if (used == N - 1) {
    throw whatever_exception_type_you_like("buffer too small");
    // or even:
    abort();
  }
}
Run Code Online (Sandbox Code Playgroud)

"固定"意味着"固定大小",而不是"与破碎相对".:)

  • 使用固定大小的char缓冲区就像要求缓冲区溢出一样. (2认同)
  • @delnan:当你需要的尺寸固定时. (2认同)