首页 > 解决方案 > 关于使用 fwrite 写入字符数组的正确方法的新手问题?

问题描述

fwrite在下面的缩写函数代码中,请您告诉我to的两个版本之间是否有任何重要区别stdout

if*n是指向字符数组的指针,l是要写入的字符数,是否需要先复制字符串,然后用 的第三个参数写入,如第一个1中的第二个?或者可以排除副本并使用第二组,第三个参数在哪里?fwriteiffwritelen

如果相关,则字符数组n是 JSON 字符串,需要为 UTF-8。

谢谢你。

int writeout( char *n, int l )    
  {    
    const uint32_t len = l > 0 ? l : strlen( n );    
    char msg[ len ];    
    strncpy( msg, n, len ); 
    
    if ( fwrite( &len, sizeof len, 1, stdout ) != 1    
        || fwrite( msg, sizeof msg, 1, stdout ) != 1 )    
      {
      }
    
    if ( fwrite( &len, sizeof len, 1, stdout ) != 1    
        || fwrite( n, sizeof( char ), len, stdout ) != len )    
      {
      }

    return 0;
  } 

标签: arrayscfwrite

解决方案


在使用fwrite. 这样做实际上是浪费。在你的功能中,

char msg[ len ];
strncpy( msg, n, len ); 
// ...
fwrite( msg, sizeof msg, 1, stdout )

应该期望产生与刚才完全相同的输出

fwrite( n, len, 1, stdout );

. 这可能产生与

fwrite( n, 1, len, stdout );

, 但在这种情况下,后者将向len调用者返回与前者 (1) 不同的值 (),因为第二个参数确定fwrite传输和计数数据项的单元大小。


推荐阅读