프로그래밍/C++, C언어 오류 해결 3

비주얼 스튜디오 어셈블리코드 확인방법

C나 C++ 언어에서의 실행파일 생성단계 중 컴파일 단계에서는 소스파일이 컴파일을 거쳐 어셈블리가 됩니다. 에러들이 발생하고, 해결방안에 대한 힌트를 찾을 때 어셈블리 코드에서 직접 확인가능한 경우가 있다. 도구 -> 옵션 -> 디버깅 -> 주소 수준 디버깅 사용 체크 분기점 설정 -> 디버그모드 -> 디버그 -> 창 -> 디스어셈블리

scanf 사용시 오류 (scan_f)

#define _CRT_SECURE_NO_WARNINGS (소스코드 첫 부분) #pragma warning(disable:4996) (소스코드 첫 부분) _CRT_SECURE_NO_WARNINGS (프로젝트 속성\c/c++\전처리기\전처리기 정의에 추가) 소스파일 만들 시 Security 체크 해제 sizeof 연산자를 세번째 인자에 넣는다. char str[50]; scanf_s("%s", str, sizeof(str)); scanf 가 버퍼 오버플로우에 취약한 문제때문에 scanf_s를 대신 사용하도록 한다. 오버플로우란 할당된 버퍼에 들어갈 수 있는 양보다 더 많은 양을 넣게 되면 프로그램이 멈추는데 이것을 해커들이 이용했기 떄문에 문제를 해결하기 위해 scanf_s가 등장했다. %d, %f와 같은..

"const char *" 형식의 인수가 "char *" 형식의 매개 변수와 호환되지 않습니다.

아래와 같이 코딩을 하다가 오류가 발생함 void print_nospace(char *str) { 중략 } int main() {print_nospace("Hello, World!\n");} 매개변수로 char *str를 사용하는 도중에 에러가 발생. 매개변수로 const char *str 입력 "Hello, World!\n" 은 변수가 없는 문자열 프로그램상에서 주소값으로 접근할 수 없기때문에 함수의 매개변수로 넘겨주려면 const를 적어줘야 한다. 즉, 대입하려는 문자열이 문자열 상수 이기때문에 const 를 붙여준다 C에서는 문자열 리터럴이 char의 배열이지만, C++에서는 const char의 배열이다. 이 오류는 비쥬얼 스튜디오 2017이상에서 발생.