2011-04-04 42 views
0

有沒有其他方法可以在C++中使用scanfprintf函數重寫相同的腳本? 謝謝!從c到C++的替代方法

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

    int main(int argc, char * argv[], char* env[]) { 
    char quer[222]; 

    printf("Content-type: text/plain\n\n"); 

    scanf("%s",quer); 
    printf("%s\n",quer); 
    return 0; 
    } 
+2

爲什麼?除了易於修復的緩衝區溢出之外,這段代碼有什麼問題? – DarkDust 2011-04-04 17:19:36

+0

主要參與者不是arg或2個參數。按照標準。 – Nyan 2011-04-04 18:32:22

+1

@Nyan - 該標準還允許其他實現定義的'main()'簽名。讓第三個參數指向環境塊是非常普遍的。 – 2011-04-04 18:51:12

回答

5
#include <iostream> 
#include <string> 

int main() 
{ 
    std::cout << "Content-type: text/plain\n\n"; 

    std::string quer; 
    std::getline(std::cin, quer); 
    std::cout << quer << '\n'; 
} 
1

這取決於平臺上了一點,但在Unix(或任何平臺,一個換行符是\n),這應該是錯誤兼容。

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

int main(int argc, char * argv[]) 
{ 
    char quer[222]; 

    puts("Content-type: text/plain\n"); 

    gets(quer); 
    puts(quer); 
    return 0; 
} 

但考慮到一個C++的解決方案是可接受的,我建議cinstringgetlinecout用於I/O。

+0

使用'cout'和/或'cin'的方法怎麼樣?感謝您的幫助 – HarryJEST 2011-04-04 17:23:51

1

我不知道是什麼原因....但你也可以使用cin/cout代替你在那裏的scanf/printf。

2

This? (注:此代碼沒有被編譯或測試。)

int main(int ac, char **av) { 
    std::string quer; 
    std::cout << "Content-type: text/plain\n\n"; 
    std::cin >> quer; 
    std::cout << quer << "\n"; 
} 
+0

@DarkDust:謝謝。 – 2011-04-04 17:30:12

2

您可以使用C++的iostream。

#include <iostream> 
#include <string> 
using namespace std; 

int main() 
{ 
    string quer; 
    cout << "Content-type: text/plain" << endl; 
    cin >> quer; 
    cout << quer; 
    return 0; 
} 
+0

只是爲了指出。你聲明「using namespace std」,然後在代碼中你有時會特別引用一個類型,即'std :: string',但在其他時候你並沒有專門引用它。即'cin'和'cout'。我建議你用這種或那種方式來做。特別像@Mike Seymour在上面的答案中所做的那樣。 – 2011-04-04 17:29:54

+0

清理後的答案更一致。 – 2011-04-04 17:36:39