2012-03-31 22 views
0

キーボードから文字列または数字を入力して表示したいとします。どうすればいいのですか? これは私が持っているものですが、私にあらゆる種類のエラーを与えますが、私のコードは気にしません。私はそれを行う正しい方法が何であるか知りたい。winapi scanf printfとデータ型

いくつかのコードを例として提供していますが、私はさらに文書化することができます。

#include "stdafx.h" 
#include <windows.h> 
#include <conio.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    LPSTR test; 

    scanf("%s", &test); 
    printf("%s", &test); 
    //_getch(); 
    return 0; 
} 
+0

ここでは正しく表示されないので、タブではなく、投稿時に必ずコード内のスペースを使用してください。 –

答えて

1

scanfは、事前に割り当てられたバッファに読み込みます。フィールドの幅を指定しない限り、オーバーフローをバッファリングすることは安全ではありません。 "%50s"

同様に、printf("%s", str)は、strの文字列の最初の文字へのポインタをとります。

ポインタをポインタに渡しているので、関数がメモリ管理を行うと予想しています。 scanfは決してmallocを呼び出しません。

char testbuf[ 51 ]; // allocate space for 50 characters + termination 
LPSTR test = testbuf; 

scanf("%50s", test); // read at most 50 characters 
printf("%s", test); 
//_getch(); 
return 0; 
+0

ありがとうございました。あなたが私をもう一度手助けすることができれば、別の質問を投稿しました.. http://stackoverflow.com/questions/9956302/how-do-you-define-a-constant-in-winapi –

1

あなたがtestに任意のメモリを割り当てられていないので、あなたはいくつかのオプションがあります。

    char配列に testのあなたの宣言を変更

  1. char test[64];
  2. testのためのいくつかのメモリを割り当てられましたmallocを使用して:
    LPSTR test = malloc(64 * sizeof(*test));

また、この行は間違っている:

scanf("%s", &test); 

それはちょうどscanf()を使用するときは、文字配列のアドレスを必要としない、とまともなコンパイラはあなたを与える必要があり

scanf("%s", test); 

する必要がありますそこには警告があります。