如何在C中打印没有库函数的变量的charcater,字符串或值?

Man*_*bts 8 c printing printf character putchar

例如,如果我不应该使用像printf,putchar这样的标准库函数,那么如何轻松地将字符打印到屏幕上.有没有简单的方法来做到这一点.我不太了解系统调用,如果我必须使用它们,那么如何?

那么任何一个建议都可以轻松打印而不使用库函数?

der*_*ert 15

在标准C中,你不能.C中定义的唯一I/O是通过C标准库函数.

在给定的平台上,可能有办法:

  • 直接进行内核调用.您可能需要编写一些内联汇编来执行此操作.您可以write直接进行litb的调用,而无需使用C库.获取C库的源代码,看看它是如何完成的.
  • 直接写入帧缓冲区.多用户操作系统通常不允许这样做(至少不进行任何库/内核调用).

除非您正在编写自己的C库,否则我不确定您为什么要这样做.

  • 'plz发送codez'不是SO的意思. (6认同)

Joh*_*itb 6

在linux中,您可以使用write系统调用:

write(1, "hello\n", 6); // write hello\n to stdout
Run Code Online (Sandbox Code Playgroud)

如果你不能得到足够的,你可以更低一点,一般调用系统调用:

syscall(__NR_write, 1, "hello\n", 6);
Run Code Online (Sandbox Code Playgroud)

值得了解的是strace,您可以使用它来查看运行时任何特定程序使用的系统调用.但请注意,对于"一些简单的解析器",几乎不需要使用原始系统调用.更好地使用c库的功能.

顺便说一句,如果你想在不使用c标准库的情况下在Windows中执行上述操作,请留意WriteFile和GetStdHandle函数.虽然不会像linux解决方案一样l33t.

  • `objdump -T /lib/libc.so.6 | grep syscall`告诉我`syscall`仍然是一个库函数:-D (3认同)
  • 讨厌您,这是一个库函数。最有可能在您的C库中。 (2认同)

Man*_*bts 4

好的,谢谢大家的回答。我在问题下面的郝先生的评论中找到了一个简单的答案。他的答案是像这样的简单程序\n

Turbo C(DOS程序):

\n\n
char far* src = (char far*) 0xB8000000L; \n*src = \'M\'; \nsrc += 2; \n*src = \'D\'; \n
Run Code Online (Sandbox Code Playgroud)\n\n

或者试试这个: http: //en.wikipedia.org/wiki/Brainfuck :) \xe2\x80\x93 //Hao(一小时前)\n

我在 Turbo C 上尝试了它及其工作原理。\n我想要一个像这样的简单解决方案,我想接受它作为正确答案,但他(Hao)将其作为评论给出,所以我将其粘贴到此处,以便其他用户了解这一点代表他并接受了。再次感谢郝先生。

\n