ccbbcc 2024-10-03 14:18 采纳率: 91.6%
浏览 0
已结题

这个程序为什么输出这样

代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
int main(void)
{
    int result =-1;
    int fd[2],nbytes;
    pid_t pid;
    char string[]="ni hao, pipe!";
    char readbuffer[80];
    int *write_fd=&fd[1];
    int *read_fd=&fd[0];
    result=pipe(fd);
    if(-1==result)
    {
        printf("create pipe failed\n");
        return -1;
    }
    pid=fork();
    if(-1==pid)
    {
        printf("fork course failed!\n");
        return -1;
        
    }
    if(0==pid)
    {
        close(*read_fd);
        result=write(*write_fd,string,strlen(string));
        return 0;
    }
    else
    {
        close(*write_fd);
        nbytes=read(*read_fd,readbuffer,sizeof(readbuffer));
        printf(" recv %d ge num,content is:%s\n",nbytes,readbuffer);
    }
    return 0;
}



运行

img


请问专家,pipe后面的乱码是怎么回事?谢谢!

  • 写回答

1条回答 默认 最新

  • 檀越@新空间 2024-10-03 14:20
    关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    这是一段C语言编写的程序,它的目的是在管道创建失败后,从第二个输入流读取内容并打印出来。但是,在该代码后面,出现了乱码问题。

    具体来说,因为字符串包含中文字符("ni hao",")并且是无制表符分隔的,并且在这个程序中没有使用编码转换函数来处理这些字符,所以当你运行这段代码时,结果可能会显示出一些乱码。

    要解决这个问题,你需要对原始字符串进行适当的编码转换。这里给出一个可能的修改方案:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<unistd.h>
    
    #define MAX_SIZE 80
    
    int main(void)
    {
        int result =-1;
        int fd[2], nbytes;
        pid_t pid;
        char string[MAX_SIZE];
        char readbuffer[MAX_SIZE];
        int *write_fd=&fd[1];
        int *read_fd=&fd[0];
        result=pipe(fd);
        if(-1==result)
        {
            printf("create pipe failed\n");
            return -1;
        }
    
        pid=fork();
        if(-1==pid)
        {
            printf("fork course failed!\n");
            return -1;
            
        }
        if(0==pid)
        {
            close(*read_fd);
            result=write(*write_fd,string,strlen(string)+1);
            return 0;
        }
        else
        {
            close(*write_fd);
            strncpy(string,nbytes肌肉,MAX_SIZE);
           差距(差距string(nbytes肌肉,MAX_SIZE));
        }
        return 0;
    }
    

    在这里,我们首先定义了一个长度为MAX_SIZE的字符串string,然后将它设置为空,用于后续的字符串拼接操作。然后,我们为管道创建成功后,我们调用write函数将这个字符串写入第二个输入流。最后,我们在回调函数中更改string的内容,以替换前一次读取的内容。这就是我们改进了程序,解决了乱码问题的方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月11日
  • 已采纳回答 10月3日
  • 创建了问题 10月3日