#include <stdio.h>
int main()
{
char A=0x7F; //7은 0100이므로 앞이 0이므로 7F가 출력되지만
char B=0x8F; //8은 1000 이므로 앞이 1 이므로 남은 4바이트 를 1로 다채워서(부호확장) FFFFFF8F로 출력이 된다
char C=0xFF;
unsigned char A1=0x7F; //unsigned 형이 속도가 빠르다, signed 는 부호확장시에 +,-체크를 해야하므로
unsigned 에 비해 느린것이다.
unsigned char B1=0x8F;
unsigned char C1=0xFF;
printf("%X,%X,%X\n",A,B,C);
printf("%X,%X,%X\n",A1,B1,C1);
return 0;
}
unsigned int 는 길어서 쓰기가 불편하므로
typedef unsigned int uint_t; 로 정의 하여 사용하면 된다.
typedef는 앞에 #이없고 뒤에 ; 있으므로 전처리 언어가 아니고 C컴파일언어이다.
약속으로 typedef정의를 하면 만든 변수 뒤에 _t를 붙인다.
strncpy 함수원형 - 리눅스
STRCPY(3) 리눅스 프로그래머 매뉴얼 STRCPY(3)
NAME
strcpy, strncpy - 문자열 복사하기.
SYNOPSIS
#include <string.h>
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
DESCRIPTION
strcpy() 함수는 src(`\0' 문자를 포함)가 가리키는 문자열을
dest가 가리키는 배열에 복사한다. 문자열을 겹쳐지지 않으며
목적지 문자열 dest는 복사 받을 정도로 충분히 커야 한다.
strncpy() 함수는 src의 n바이트만을 복사한다는 것을
제외하고 비슷하다. 만일 src의 처음 n 바이트중 null이
없다면, 결과는 null-종료가 안될수 있다.
src 의 길이가 n보다 작은 경우, dest 의 나머지는 null로
패드된다.
RETURN VALUE
strcpy()와 strncpy() 함수는 목적지 문자열 dest에 대한
포인터를 반환한다.
..dest = destination
..scr = source
char *strncpy(char *dest, const char *src, size_t n);
에서 두번째 인자가 const char 형 이므로 함수 내부적으로 두번째 인자를 수정 하지 않겠다는 말이다.
함수 원형에서 그 함수에 대한 모든 정보가 다 들어가 있음을 숙지하자
(8)atoi
alphanumeric to integer 에서 나온 말로 문자열을 정수로 변환 시킨다.
8.6 문자열을 다루는 배열
문자열의 배열을 2차원 배열로 구성하는 경우를 살펴본다.
//문자열을 다루는 배열
#include <stdio.h>
#include <string.h>
#define MAXSTD 5
#define NAMELEN 15
int main()
{
int i, yes=0;
char name[NAMELEN];
char student[MAXSTD][NAMELEN]={"Michael Bolton","Richard Marx","Ricky Martin","Celin Dion","Cutting Crew"};
for(i=0;i<5;++i)
{
printf("%p \t%s\n",student[i],student[i]);
}
printf("Enter student name: ");
gets(name);
for(i=0;i<MAXSTD;++i)
{
if(strcmp(student[i],name)==0)
{
yes=1;
}
}
if(yes)
{
printf("Yes,%s is a student in CS department\n",name);
}
else
{
printf("NO,%s is not a student in CS department\n",name);
}
return 0;
}
8.7 문자열을 가리키는 포인터의 배열
#include <stdio.h>
#include <string.h>
#define MAXSTD 5
int main()
{
int i,yes=0;
char name[15];
char *student[MAXSTD]={"Michael Bolton","Richard Marx","Ricky Martin","Celin Dion","Cutting Crew"};
//char* 5개 이며 {}안의 이름("Michael Bolton") 각각의 주소값이 들어가 있다
printf("Enter student name :");
gets(name);
for(i=0;i<MAXSTD;++i)
{
if(strcmp(student[i],name)==0)
{
yes=1;
}
}
if(yes)
{
printf("Yes %s is a student in CD department\n",name);
}
else
{
printf("No, %s is not a student in CS department\n",name);
}
return 0;
}
//문자열 포인터를 이용하여 이름을 알파벳순으로 정렬하는 프로그램
#include <stdio.h>
#include <string.h>
#define MAXSTD 5
#define NAMELEN 15
int main()
{
char student [MAXSTD][NAMELEN];
char *stptr[MAXSTD];
char *temp;
int i,j,count=0;
printf("Please enter name of student :\n");
while(count<MAXSTD)
{
printf("Student %d : ",count +1);
gets(student[count]);
stptr[count++]=student[count];
}
for(i=0;i<count-1;++i)
{
for(j=i+1;j<count;++j)
{
if(strcmp(stptr[i],stptr[j])>0)
{
temp=stptr[j];
stptr[j]=stptr[i];
stptr[i]=temp;
}
}
}
printf("\nStudent List : \n");
for(i=0;i<count;++i)
{
printf("Student %d: %s\n",i+1,stptr[i]);
}
return 0;
}
|
알파벳순으로 정렬되어 있다.--->데이타 베이스
위치조정시에는 배열을 통채로 바꾸는 것보다 포인터를 사용하는 것이 좋다.
파일은 저장된 값이 변하지 않고 정렬할때 만 주소로 바꾸어서 표현하는 것이다.
|
|
|