2012-02-11 4 views
0

그래서 사용자가 입력 한 각 문자를 '*'로 변환하는 C++ 함수를 만들려고했습니다. 하지만 .exe 파일 (CMD)을 실행할 때 비밀번호를 묻지 만 단어를 입력하면 오류가 발생합니다. "디버그 어설 션이 실패했습니다." 왜 이런 일이 일어나는 지 아십니까? 문자열의 아이폰에 돌려 준다 "C++의 암호화 함수

+1

디버거를 사용하여 코드를 단계별로 실행 해 보았습니까? 어떤 오류가 발생 했습니까? – RvdK

+0

귀하의 질문은 Windows에만 해당됩니다. Posix 시스템에서 코드가 실행되지 않습니다! 리눅스는 http://linux.die.net/man/3/crypt와 훨씬 더 많은 것을 제공합니다 –

+0

이것은 나에게 암호화처럼 보이지 않습니다. 함수는 문자열의 모든 영문자를 별표로 변환하는 것으로 보인다. – IanNorton

답변

2

그냥 CIN >> 텍스트"줄 뒤에 INT 크기 =의 나 strlen (텍스트) "이동 : 여기

내 코드입니다 사용자가 텍스트를 입력 한 후 '\ 0'을 검색하여.이 작업을 수행해야합니다.

char Text[40]; 
cout << "Enter your desired password: "; 
cin >> Text; 
int Size = strlen(Text); 
encrypt(Text, Size); 
0

나 strlen (텍스트)

#include "stdafx.h" 
#include "iostream" 
#include "conio.h" 
#include "string" 
#include "ctype.h" 

using namespace std; 

void encrypt(char string[], int len) 
{ 
    for (int count = 0; count < len; count++) 
     if (isalpha (string [count])) 
      string[count] = '*'; 
} 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char Text[40]; 
    int Size = strlen(Text); 
    cout << "Enter your desired password: "; 
    cin >> Text; 
    encrypt(Text, Size); 
    cout << Text << endl; 
    _getch(); 
    return 0; 
} 
0

당신은 텍스트를 입력하기 전에에서 텍스트 크기를했다.

,536을
... 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char Text[40]; 
    // int Size = strlen(Text); // to early 
    cout << "Enter your desired password: "; 
    cin >> Text; 
    int Size = strlen(Text); // now Text is filled and the Size will not change. 
    encrypt(Text, Size); 
    cout << Text << endl; 
    _getch(); 
    return 0; 
} 
1

for 루프는 입력 텍스트의 길이를 고려하지 않습니다. 대신 무작위 값으로 가득 찬 초기화되지 않은 char 배열에 대해 strlen을 호출하여 Size를 제공합니다. 컴파일러가이에 대해 경고해야합니다. 항상 경고를 무시하지 마십시오. 이 NUL (0x0으로) 아마 그래서 당신에게 런타임 오류를 제공하여 스택의 다른 부분으로 40 문자 공간의 끝 떨어져 떨어지고 (분할 위반을 찾을 때까지 나 strlen으로

char Text[40]; 
int Size = strlen(Text); 

문자의 순서를 다음과 텍스트는 사용자가 입력되지 않은 것처럼)

0

당신은, 너무 일찍 라인

int ln 〓 strlen(Text); 

을 넣어. 줄 끝까지 이동해야합니다.

cin >> Text;