arrays - 关于使用 fwrite 写入字符数组的正确方法的新手问题?
问题描述
fwrite
在下面的缩写函数代码中,请您告诉我to的两个版本之间是否有任何重要区别stdout
?
if*n
是指向字符数组的指针,l
是要写入的字符数,是否需要先复制字符串,然后用 的第三个参数写入,如第一个1
中的第二个?或者可以排除副本并使用第二组,第三个参数在哪里?fwrite
if
fwrite
len
如果相关,则字符数组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;
}
解决方案
在使用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
传输和计数数据项的单元大小。
推荐阅读
- api - 由于 Composer 内存限制错误,我无法安装任何软件包
- c - 什么是评价?
- multithreading - 如何保证对象在 Powershell 中实例化的顺序?
- yii2 - 无法存储用户身份 Yii2
- javascript - 运行关于属性更改的查询
- node.js - sqs sendmessage上的Lambda超时
- angular - 如何从 Visual Studio 代码(角度项目)连接到本地 TFS 2015
- python - Unstack MultiIndex 数据帧
- wordpress - nginx 在子目录中安装 wordpress
- php - 在 HTML 中包含 PHP 文件