关于使用 fwrite 写入字符数组的正确方法的新手问题?
Novice question concerning proper method of writing a character array using fwrite?
在下面的缩略功能代码中,请问fwrite
和stdout
两个版本有什么重要区别吗?
如果*n
是指向字符数组的指针,l
是要写入的字符数,是否需要先复制字符串,然后用[的第三个参数写入=15=],如第一个 if
的第二个 fwrite
?或者可以排除copy,使用第二组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 );
,也是,但在那种情况下,后者将 return 一个与前者不同的值 (len
) 给调用者 (1),因为第二个参数决定单元的大小fwrite
传输和计算数据项。
在下面的缩略功能代码中,请问fwrite
和stdout
两个版本有什么重要区别吗?
如果*n
是指向字符数组的指针,l
是要写入的字符数,是否需要先复制字符串,然后用[的第三个参数写入=15=],如第一个 if
的第二个 fwrite
?或者可以排除copy,使用第二组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 );
,也是,但在那种情况下,后者将 return 一个与前者不同的值 (len
) 给调用者 (1),因为第二个参数决定单元的大小fwrite
传输和计算数据项。