我在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 :(得分:0)
我假设你指的是
行printf("%s",password);
此行应为
printf("%p", (void*) &password);
的接受答案中,这一点得到了很好的解释
答案 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
,
包括示例代码。