小编phs*_*phs的帖子

内存分配失败.但为什么会崩溃?或者是吗?

我正在尝试realloc,给它更大和更大的尺寸,并检查是否重复使用相同的块:

int main ( void )
{
  char * newstr, * prevstr = NULL;
  size_t newsize, prevsize = 0;
  printf ("We play with realloc\n");
  while (1) {
    newsize = prevsize + 1 + prevsize/3; /* add 33% */
    newstr = realloc(prevstr, newsize);
    if (newstr == NULL) {
      printf ("could not alloc newsize=%zu. Sorry\n", newsize);
      break;
    } else {
      printf ("newsize=%zu successfully alloc'ed\n", newsize);
      if (newstr == prevstr) {
        printf ("newstr = prevstr:\tSame block reused\n");
      } else {
        printf …
Run Code Online (Sandbox Code Playgroud)

c malloc memory-management

21
推荐指数
2
解决办法
1469
查看次数

fputs比格式("%s",...)更有效吗?

在C代码中

printf("%s", message);
Run Code Online (Sandbox Code Playgroud)

我想知道我是否应该使用

fputs(message, stdout);
Run Code Online (Sandbox Code Playgroud)

前面的代码更清晰但速度更慢?或者使用更多内存?我更喜欢更清晰的代码,但当它看起来像浪费时间和内存时更糟糕.

我很想知道编译器检测到这种情况,并且在运行时没有完成必要的格式解析和解释.毕竟,gccprintf("")这些编译器的抱怨可能会"理解"格式并对其进行预处理.

PS:前者的风格更清晰,写作时更明显format("name=%s\n",unameData.nodename);而不是 fputs(stdout,"name=");fputs(stdout,unameData.nodename);putchar('\n');.这是具有格式的所有目的.

c format stdio

3
推荐指数
1
解决办法
197
查看次数

标签 统计

c ×2

format ×1

malloc ×1

memory-management ×1

stdio ×1