【问题标题】:C write() function not working as expectedC write() 函数未按预期工作
【发布时间】:2018-04-10 14:57:47
【问题描述】:

程序不输出修改后的单词。实际上它没有返回任何东西......

如果我输入“Jake”,例如控制台上的输出是:

Jake

Modified Name: JAKE

但它应该进一步输出加密的名称。你可以帮帮我吗?我想我没有写错函数

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main() {

    char name [120];

    read(0,name,120);

    for(int i = 0; i<=119; i++){
        if(name[i] >= 'a' && name[i] <= 'z'){
            name[i] -= 32;
        }
    }

    printf("\nModified Name: %s\n",name);
    int c = 13;

    for (int i = 0; i<=119; i++){
        if(name[i] + 13 > 'Z'){
            c = i + 13 - 'Z';
            name[i] = 'A' + c;
        }else{
            name[i] = name[i] + c;
        }
    }

    write(0, name, 120);
    return 0;
}

【问题讨论】:

  • 文件描述符在写函数中为0,为什么?
  • 您应该始终检查可能失败的函数的返回值,例如readwrite
  • 你用的是什么编译器?我尝试使用在线编译器,似乎可以正常工作:onlinegdb.com/ByA-Wd7Rb
  • 为什么你在循环中使用i&lt;=119 你的输入name 可能不会到达最后一点。这是最后一次写入的错误。表达第二个原因
  • 你为什么在这里使用readwrite?使用可以处理 lines 的 stdio 函数。

标签: c function printf output


【解决方案1】:

文件描述符 0 表示标准输入(例如输入设备或文件或键盘)程序本质上从这些设备读取数据并写入这些设备肯定会失败。

0 - 标准输入

文件描述符 1 表示标准输出(比如监视器、文件或磁盘等等)程序本质上是向这些输出写入数据。

1 - 标准输出

文件描述符 2 或多或少是一个输出设备(对处理错误发生的位置有一些特定的解释,即到哪个设备、文件、控制台或..)

2 - 标准错误

在你的情况下

write( 0, ... ); 

程序本质上是在尝试写入可能以读取模式打开的输入设备,因此它会失败。

查看以下链接了解更多信息。 wiki page here

【讨论】:

    【解决方案2】:

    我认为应该写入文件描述符 1(stdout),不是吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-01
      • 2019-10-30
      • 2015-04-11
      • 2022-01-25
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多