8.3 문자열의 선언
char carray[]={'a','b','c'};//문자배열로 널값이 없으므로 Stack에3바이트 저장되고 코드영역에 3바이트 저장되있다
char astring[]={'a','b','c','\0'};//문자열 스텍4바이트 코드 4바이트
char bstring[]="abc";//문자열 스텍 4바이트 코드 4바이트
char *cstring[]="abc";//문자열 스텍 4바이트 코드 4바이트
문자열 상수의 내용을 변경 시키는 프로그램의 예
#include <stdio.h>
int main()
{
char *cstring = "abc"; //*cstring 주소는 stack 에 저장되어 있다
printf("cstring: %p %s\n",cstring,cstring);//"abc"의 주소이기 때문에 코드영역에 있다
cstring="def";
printf("cstring: %p %s\n",cstring,cstring);
return 0;
}
8.4 gets()와 puts() 함수
scanf 는 입력 받는 사이즈를 알수가 없으므로 &A 주소에 받는대로 값을 넣는다.
그러면 버퍼 오버플로우가 생기는데 해킹수단으로 잘 이용된다.
gets()도 버퍼 크기 인자가 없어서 해킹의 위험이 크다.
#include<stdio.h>
int main()
{
char string[80];
printf("Please enter a sentence: ");
gets(string);
puts(string);
return 0;
}
입력을 정해진것 보다 더 넣게 되면 오버플로우가 발생한다.
8.5 문자열 함수들
|
|
|