2017-01-07 113 views
0

我在Visual Studio C++ 2012中编写简单的程序。我动态地输入一些输入。当在控制台int值上打印时,它工作正常,但是打印char * somevariable会停止,并且发生错误,program.exe已停止工作。控制台在打印字符时停止*某些输出

我的计划是像

#include <stdlib.h> 
#include <iostream> 
#include <stdio.h> 
using namespace std; 

int main() 
{ 
    int choice; 
    //char *userName; 
    static char* password; 
    static char* firstname; 
    static char* lastname; 
    static char* username; 
    char* name; 

    printf("\n 1.Login"); 
    printf("\n 2.register"); 

    printf("\nEnter choice"); 
    scanf("%d", &choice); 
    printf("\n%d", choice); 

    switch (choice) { 

    case 1: 
     printf("\n Enter username :"); 
     scanf("%s", &username); 
     printf("\n Enter username :"); 
     scanf("%s", &password); 
     break; 
    case 2: 
     printf("\n Enter Firstname :"); 
     scanf("%s", &firstname); 
     printf("\n Enter lastname :"); 
     scanf("%s", &lastname); 
     printf("\n Enter username :"); 
     scanf("%s", &username); 
     printf("\n Enter username :"); 
     scanf("%s", &password); 
     printf("\n"); 
     //name = "sdfjsdjksdhfjjksdjfh"; 
     printf("%s", password); 
     break; 
    default: 
     printf("\n Wrong Choice Entered.."); 
     break; 
    } 

    getchar(); 
    return 0; 
} 

回答

0

static char* password;声明一个指向char的指针。只是 的指针。它没有指向任何地方的指针,也没有为它指定任何内存。

scanf("%s", &password); 

读取控制台输入并将其存储在地址password的内存中。

  • 问:什么是在该地址? A.指向char的指针(password)。

  • Q.指向char的指针占用了多少内存?

  • 答:4个字节或8个字节(取决于您是否在32位或64位系统中)。

  • Q.如果输入“sdfjsdjksdhfjjksdjfh”,您将从password的地址开始写多少个字节?

  • A. 21.

所以你写额外的13或17个字节的密码到......什么内存?我们不知道 知道,但我们可以肯定地说它被你的程序的一些代码 所占用,因为用自己的垃圾覆盖你自己的程序会导致它在 停止工作,在它自然结束之前的某个时间。

解决方案?查找a good book about programming in C 并了解基础知识。否则,至少要读取包括示例代码的documentation of scanf, 。

相关问题