2013-03-08 104 views
0

我想从这个代码从控制台输入,但它给我运行时异常在某些内存位置,每次我尝试运行它并输入第一个可能的输入。 我正在使用Visual Studio 2010.我遇到了与MingW和Dev C++相同的问题。但是,旧的TurboC3编译器的代码运行良好。运行时异常与输入使用scanf或获取在C

int Nowhere(int x); 
... 
char* AtBashEncrypt(char* message); 
char* AtBashDecrypt(char* encrypted); 

int main() 
{ 
    char *input = "", *ciphertext = "", *plaintext = ""; 
    system("cls"); 
    printf("AtBash Cipher\nEnter a string to be encrypted: "); 
    gets(input); //this is where I get the error 
    ciphertext = AtBashEncrypt(input); 
    ... 
    getch(); 
} 

它可能有什么问题吗?

+1

你还没有分配的内存。 – 2013-03-08 03:56:40

回答

1
char *input = ""; 

是一个指向驻留在只读内存中的字符串文字的指针,您不能修改其内容。任何尝试这样做都会导致未定义的行为。你需要的是一个数组。

#define MAX_SIZE 256 
char input[MAX_SIZE]=""; 

读取良好:输入VAR
What is the difference between char a[] = ?string?; and char *p = ?string?;?

此外,你应该use fgets instead of gets

+0

不仅如此,'gets()'是一个永远不会被使用的破坏函数(因为几乎不可能避免缓冲区溢出)。 – 2013-03-08 03:58:35

+0

@JacobAbrahams:这个参数是无效的,因为*即使是可写的,也是一个在这种情况下不成立的假设。 – 2013-03-08 04:03:01

+0

@JohnZwinck:确实如此。 – 2013-03-08 04:03:18