2013-02-10 86 views
0

是否可以在不使用printf函數的情況下使用C編寫「hello world」程序? (同時仍保持相對程序在幾行)C中沒有printf的「Hello world」?

+4

您可以隨時使用puts,fwrite等。 – nhahtdh 2013-02-10 04:55:01

+2

'write(1,「hello world」,11);' – technosaurus 2013-02-10 04:56:10

+0

@technosaurus:這不是C標準的一部分,但可能是其他標準的一部分。 – nhahtdh 2013-02-10 04:57:47

回答

5

這應該工作:

int main (void) 
{ 
    puts("Hello, World!"); 
    return 0; 
} 

爲什麼你不希望用printf?我想不出任何理由。

+0

這不是我我不想使用它,這是一種「有可能做」的問題,因爲我是C的新手。 – user1869465 2013-02-10 05:04:24

+4

實際上,如果你的用例只是一個普通的字符串,並且在最後換行,它會使更多感覺不_使用'printf'。 'puts'幾乎肯定是更高效的,因爲它不必擔心格式化字符。 +1,'main'改爲其中一個規範形式:-) – paxdiablo 2013-02-10 05:05:54

+4

@paxdiablo我已經看到GCC優化'printf(「字符串字面量)」;'放入'puts(「字符串字面量」);'。我發現那是因爲它破壞了我使用動態庫注入來劫持'printf()'的嘗試:O – 2013-02-10 06:35:28

3
write(stdout, "hello world", strlen("hello world")); 
+1

Err,'stdout'是_stream,_不是文件描述符。也許你的意思是'fwrite'?特別是因爲C本身沒有'寫'。 – paxdiablo 2013-02-10 05:04:22

+2

Hrm,對。將stdout更改爲數字1. Thx。 – PQuinn 2013-02-10 05:29:04

+1

或2寫入到stderr,並且包含unistd.h用於寫入和strlen的string.h(或者只是把整數值,因爲它是一個常量字符串) – technosaurus 2013-02-10 05:35:05

2

這是隻使用puts("hello world\n");

#include <stdio.h> 
int main(void){ 
    char *s="hello world\n"; 
    while (*s) putchar(*s++); 
} 
2

那麼一個荒唐的選擇,如果我們要包含一些無聊的例子(是的,我看着你,technosauraus),我去:

#include <stdio.h> 

void makeItSo (char *str) { 
    if (*str == '\0') return; 
    makeItSo (str + 1); 
    putchar (*str); 
} 

int main (void) { 
    makeItSo ("\ndlrow olleH"); 
    return 0; 
} 

只是不要對很長的字符串做到這一點,或者你找出什麼堆棧溢出真的意味着:-)

+0

+1額外的愚蠢作爲扭轉弦是沒有必要的。 :) – 2013-02-10 07:11:19