winapi scanf printf和数据类型

时间:2012-03-31 13:05:28

标签: c winapi

我想从键盘输入一个字符串或数字,然后显示它。我该怎么做? 这就是我所拥有的,给了我各种各样的错误,但是没关系我的代码,这只是一个例子。我想知道正确的做法是什么。

请提供一些代码作为示例,也许我可以进一步记录一些链接。

#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;
}

2 个答案:

答案 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;

答案 1 :(得分:1)

由于您尚未为test分配任何内存,因此您有以下几种选择:

  1. 将您的test声明更改为char数组:
     char test[64];
  2. 使用malloc:为test分配了一些内存  LPSTR test = malloc(64 * sizeof(*test));
  3. 另外,这条线错了:

    scanf("%s", &test);
    

    应该只是

    scanf("%s", test);
    

    使用scanf()时不需要字符数组的地址,任何体面的编译器都应该在那里给你一个警告。