gpt4 book ai didi

c - 此处的 writev 操作示例不在标准输出中打印整数值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:43 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <string.h>

int main(int argc, char *argv[])
{
int fd;
fd=open(argv[1],O_RDWR|O_APPEND);
printf("fd=%d\n",fd);
char *str0 = "hello ";
char *str1 = "world ";
int x=5;
//char ch = 'a';
struct iovec iov[3];
ssize_t nwritten;

iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0);
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1);
iov[2].iov_base = (&x);
iov[2].iov_len = sizeof(x);

nwritten = writev(1, iov, 3);//1 for stdout

printf("\n number written=%d\n",nwritten);
}

这里不是在标准输出中打印整数值。请任何人为我提出一些解决方案。

我的实际输出是

hello world

我要

hello world 5

最佳答案

您的问题属于您希望在stdout 中看到的ASCII 格式。您正在向 stdout 写入 x 的值,即 5 它不是 ASCII 中的可打印字符>.

如果您使用 x=0x31 测试您的代码,您将看到:hello world 1 因为 0x31 的 ASCII 值>'1'

示例代码:

#include <stdio.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <string.h>

int main(int argc, char *argv[])
{
int fd;
fd=open(argv[1],O_RDWR|O_APPEND);
printf("fd=%d\n",fd);
char *str0 = "hello ";
char *str1 = "world ";
int x=0x31;
//char ch = 'a';
struct iovec iov[3];
ssize_t nwritten;

iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0);
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1);
iov[2].iov_base = (&x);
iov[2].iov_len = sizeof(x);

nwritten = writev(1, iov, 3);//1 for stdout

printf("\n number written=%zd\n",nwritten);
}

输出

hello world 1
number written=16

如您所见,我还更改了 nwritten 变量的格式说明符。 ssize_t 类型需要 %zd 作为格式说明符。

另一种方法是使用 snprintf 将整数值转换为 ASCII功能:

#include <stdio.h>
#include <fcntl.h>
#include <sys/uio.h>
#include <string.h>

int main(int argc, char *argv[])
{
int fd;
fd=open(argv[1],O_RDWR|O_APPEND);
printf("fd=%d\n",fd);
char *str0 = "hello ";
char *str1 = "world ";

int x=5;
char intStr[2];
snprintf(intStr, sizeof(intStr), "%d", x);


//char ch = 'a';
struct iovec iov[3];
ssize_t nwritten;

iov[0].iov_base = str0;
iov[0].iov_len = strlen(str0);
iov[1].iov_base = str1;
iov[1].iov_len = strlen(str1);
iov[2].iov_base = intStr;
iov[2].iov_len = strlen(intStr);

nwritten = writev(1, iov, 3);//1 for stdout

printf("\n number written=%zd\n",nwritten);
}

输出

hello world 5
number written=16

关于c - 此处的 writev 操作示例不在标准输出中打印整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38889255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com