打印char *某些输出时控制台停止

时间:2017-01-07 06:01:48

标签: c++ visual-c++

我在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;
}

2 个答案:

答案 0 :(得分:0)

我假设你指的是

printf("%s",password);

此行应为

printf("%p", (void*) &password);

在这个问题Correct format specifier to print pointer (address)?

的接受答案中,这一点得到了很好的解释

答案 1 :(得分:0)

static char* password;声明指向char的指针。只是 指针。它没有指向任何指针,也没有 为它分配任何内存指向。

scanf("%s", &password);

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

  • Q值。那个地址是什么?

  • 一个。指向char(password)的指针。

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

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

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

  • 一个。 21。

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

解决方案?查找a good book about programming in C 并学习基础知识。如果做不到这一点,至少阅读documentation of scanf, 包括示例代码。