Sprintf分段错误

syl*_*syl 11 c printf segmentation-fault

numCheck是1-1000之间的数字.只有当我在charcheck中收集sprintf的结果时,此代码才会给我一个段错误.如果我只是在不使用结果的情况下使用sprintf,我就不会遇到seg错误.这里发生了什么事?

char * numString;
int charcheck = sprintf(numString, "%d", numCheck);
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 9

你需要提供自己的记忆sprintf.另外,不要使用sprintf,而是snprintf:

char buf[1000] = {0};

snprintf(buf, 999, ....);
Run Code Online (Sandbox Code Playgroud)

或者,您可以动态分配内存:

char * buf = new char[BUFSIZE];
snprintf(buf, BUFSIZE-1, ...);
/* ... */
delete[] buf;
Run Code Online (Sandbox Code Playgroud)

  • 你为什么推荐`snprintf`而不是'sprintf`? (3认同)
  • @Kevin:您通常无法知道 sprintf` 将写入多少个字符,因此您通常无法正确、可移植地使用它。即使您认为自己更了解,最好也不要破例,尤其是不要树立坏榜样。 (2认同)