2016-11-27 1 views
0

Caesar Cypher - 기본 암호화.정수가 stringv []에서 잘못된 값을 받음

두 번째 명령 줄 (argv [1])이 3과 같은 경우에도 변수 k가 음수 값을받는 이유를 이해하는 데 도움이 필요합니다.

int main (int argc, string argv[]) 
{ 
    string text; 
    int k = 0; 

    do 
    { 
     printf("Type in a plain text:\n"); 
     text = GetString(); 

//k receives wrong value 
     k = (int) argv[1]; 

// Sanity check 
     printf ("argv[1] is %s and k is %d\n", argv[1], k); 
    } 
    while (k < 0); 
+0

'string'은 표준 유형이 아닙니다. [ask]를보고 [mcve]를 제공하십시오. – Olaf

답변

0

conversion입니다 당신은 넣어해야합니다 type-cast이 아니기 때문에 유형 캐스팅을 int으로 바꾸면 char *int으로 변환해야합니다. 예를 들어 commonl y는 int atoi (const char *str)이며 헤더 파일 stdlib.h에 정의되어 있습니다. #include을 잊지 마세요. !

그러나 강력한 오류보고 때문에 strtol을 사용하는 것이 좋습니다. 오버플로시 반환 값을 지정합니다 (오버플로의 경우 underflowLONG_MAX의 경우를 반환 함) 또한 사용자가 변환 중에 base을 따르도록 설정할 수 있습니다.

0

문자열을 int로 변환 할 수 없습니다. 실제로 구문 분석해야합니다. stdlib.h에 포함 된 atoi 함수를 사용할 수 있습니다. 파일의 상단에

#include <stdlib.h> 

및 라인 변경 :

k = (int) argv[1]; 

에 : 당신이 여기에서해야 할 일은

k = atoi(argv[1]); 
관련 문제