2012-03-31 1 views
0

Je souhaite saisir une chaîne ou un numéro à partir du clavier, puis l'afficher. Comment fait-on ça? C'est ce que j'ai, ça me donne toutes sortes d'erreurs, mais peu importe mon code, c'est juste un exemple. Je veux savoir quelle est la bonne façon de le faire.winapi scanf printf et types de données

Veuillez fournir un code à titre d'exemple et peut-être quelques liens que je peux documenter.

#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

Rappelez-vous toujours d'utiliser des espaces dans votre code lors de la publication, pas les onglets, car ils ne s'affichent pas correctement ici. –

Répondre

1

scanf lit dans un tampon préaffectées. Il n'est pas sûr par rapport aux débordements de tampon sauf si vous spécifiez une largeur de champ, par ex. "%50s".

De même, printf("%s", str) prend un pointeur sur le premier caractère de la chaîne pour str.

Vous passez un pointeur sur le pointeur, donc je suppose que vous attendez des fonctions pour gérer la mémoire pour vous. scanf n'appellera jamais 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

Merci beaucoup. J'ai posté une autre question si vous seriez si gentil pour m'aider à nouveau .. http://stackoverflow.com/questions/9956302/how-do-you-define-a-constant-in-winapi –

1

Parce que vous avez attribué aucune mémoire à test, vous avez quelques options:

  1. changer votre déclaration de test à un tableau char:
    char test[64];
  2. alloué une mémoire pour test en utilisant malloc:
    LPSTR test = malloc(64 * sizeof(*test));

En outre, cette ligne est erroné:

scanf("%s", &test); 

Il devrait juste être

scanf("%s", test); 

Vous n'avez pas besoin de l'adresse d'un tableau de caractères lors de l'utilisation scanf(), et tout compilateur décent devrait vous donner un avertissement là-bas.

Questions connexes