gpt4 book ai didi

C read() 添加奇怪的字符

转载 作者:太空狗 更新时间:2023-10-29 14:52:30 28 4
gpt4 key购买 nike

我有这样的代码:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
int main(){
char input[100];
while(1){
int k = read(0,input,100);
if(k == 0) break;
write(1,input,strlen(input));
}
}

在标准输入上输入一些行之后,比如:
示例示例
示例示例
...

它不是正常显示的。相反,在输入 block 的末尾附近总是有一些奇怪的字符。有人可以解释一下吗?

最佳答案

read 读取二进制数据。它报告它读取的确切字节数。它除了读取这些字节外什么都不做。

C 字符串不包含其长度的记录。字符串的结尾由零字节指示。

因此,当 read 报告它读取了 k 字节时,这正是它写入 input 的字节数。它不添加零字节,所以您在 input 中拥有的不是字符串:它是一个字节数组,其中只有前 k 是需要的。

要打印出这些字节,请将数据的长度传递给write。由于您要打印出 read 读取的字节,因此传递从 read 返回的值。

int k = read(0,input,100);
if(k <= 0) break;
write(1, input, k);

如果您想将这些字节用作字符串,则需要附加一个尾随空字节。请注意,如果输入本身包含空字节,则第一个将是字符串的末尾。

int k = read(0,input,99);  /*1 less to make room for the null terminator*/
if (k <= 0) break;
input[k] = 0;
fputs(input, stdout);

关于C read() 添加奇怪的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20669372/

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