char str; // str이라는 변수는 1바이트로서 하나의 문자를 저장합니다.
char *str; // 포인터 변수를 선언하게 str이라는 주소에 문자열들을 저장합니다.
즉, str이라는 주소시작점에 "abcde" 이런 문자열을 입력하게 되면,
str[0] = 'a', str[1]='b', str[2]='c', str[3]='d', str[4]='e', str[5]='\0' 이렇게 저장이 됩니다.
그리고 printf("%s", str); 이렇게 하시면 표준함수 처리에서, '\0'이값이 나오기 전까지의 문자열들을 출력하므로 abcde가 출력이 됩니다.
그리고 이런 문자들은 1바이트 크기를 가지고 있고요...
그리고 한글같은것은 "가" 1바이트가 아니라 2바이트 크기를 같습니다.
즉 str이라는 주소시작점에 "가나" 이런 문자열을 입력하게 되면,
"가"= str[0], str[1] 이 두공간에 저장이 됩니다. 한글은 2바이트로 표현된다는거 알아두시면 됩니다.
그리고 스트링 길이를 알려면 string.h 에 정의된 strlen() 라이브러리를 사용하시면 됩니다.
사용 예)
#include "string.h"
int len;
char *str;
scanf("%s", str);
len = strlen(str);
printf("length = %d\n", len);
이런식으로 strlen() 함수는 문자열의 길이를 리턴 해줍니다.
strlen()사용하지 않고도 직접 문자열 길이를 알수 있습니다.
문자열의 끝은 반드시 널문자 '\0' 이것이 들어가게 됩니다.
따라서 위의 예제에서
예2)
len = 0;
while(str[len]!='\0') // 문자열의 끝이 아닐동안에
{
len++; // 문자열의 갯수를 증가시킴
}
이렇게 구하실수 있습니다.
두번째로 유저한테 스트링을 받는 질문인데요..
struct str{
char *ptr,
int length
};
이런 구조체가 있다면
우선 유저가 최대로 입력할수 있는 스트링 개수를 정의를 해야 합니다.
예를 들어 100개의 스트링 갯수만큼 입력받고 싶으면
str User_str[100]; 라고 하면 됩니다.
1번째 스트링 : User_str[0].ptr = "abcederer";
2번째 스트링 : User_str[1].ptr = "asdjfklasjdfer";
3번째 스트링 : User_str[2].ptr = "dsafasdfr";
.....
100번째 스트링 : User_str[00].ptr = "the end";
이런식으로 받을수 있습니다.
길이도 마찬가지로 strlen함수를 이용한다면
1번째 스트링 길이 : User_str[0].length = strlen(User_str[0].ptr);
2번째 스트링 길이 : User_str[1].length = strlen(User_str[1].ptr);
........
100번째 스트링 길이 : User_str[99].length = strlen(User_str[99].ptr);
시니님께서 올려주신 답변은 C에 해당하는 내용인지라 Pascal 을 언어로 쓰는 델파이에는 맞지 않습니다.
현재 제가 사용하고 있는 Delphi 2010 버전의 도움말을 확인해 보니 다음처럼 나오는 군요.
일단 2010 버전에서 지원하는 String 형은 내부적으로 ShortString/AnsiString/UnicodeString/WideString 으로 나뉩니다.
일반적으로 String 으로 선언하면 내부적으로는 UnicodeString 으로 동작하게 됩니다.
그런데 제가 Delphi 7 을 쓸 때는 String 으로 선언하면 AnsiString 으로 되었던것 같은데...이는 최근 버전에 와서 바뀐것으로 생각이 됩니다.
ShortString 의 최대 길이는 255 바이트
AnsiString ~2^31
UnicodeString ~2^30
WideString ~2^30
으로 나오는군요.
아무래도 델파이 버전에 따라서 약간씩 차이가 날 수도 있을듯 하니...사용하고 계시는 델파이의 도움말을 참고해보시는게 어떨까 합니다.
string은 char형들의 나열이라고 생각하시면 됩니다.
char str; // str이라는 변수는 1바이트로서 하나의 문자를 저장합니다.
char *str; // 포인터 변수를 선언하게 str이라는 주소에 문자열들을 저장합니다.
즉, str이라는 주소시작점에 "abcde" 이런 문자열을 입력하게 되면,
str[0] = 'a', str[1]='b', str[2]='c', str[3]='d', str[4]='e', str[5]='\0' 이렇게 저장이 됩니다.
그리고 printf("%s", str); 이렇게 하시면 표준함수 처리에서, '\0'이값이 나오기 전까지의 문자열들을 출력하므로 abcde가 출력이 됩니다.
그리고 이런 문자들은 1바이트 크기를 가지고 있고요...
그리고 한글같은것은 "가" 1바이트가 아니라 2바이트 크기를 같습니다.
즉 str이라는 주소시작점에 "가나" 이런 문자열을 입력하게 되면,
"가"= str[0], str[1] 이 두공간에 저장이 됩니다. 한글은 2바이트로 표현된다는거 알아두시면 됩니다.
그리고 스트링 길이를 알려면 string.h 에 정의된 strlen() 라이브러리를 사용하시면 됩니다.
사용 예)
#include "string.h"
int len;
char *str;
scanf("%s", str);
len = strlen(str);
printf("length = %d\n", len);
이런식으로 strlen() 함수는 문자열의 길이를 리턴 해줍니다.
strlen()사용하지 않고도 직접 문자열 길이를 알수 있습니다.
문자열의 끝은 반드시 널문자 '\0' 이것이 들어가게 됩니다.
따라서 위의 예제에서
예2)
len = 0;
while(str[len]!='\0') // 문자열의 끝이 아닐동안에
{
len++; // 문자열의 갯수를 증가시킴
}
이렇게 구하실수 있습니다.
두번째로 유저한테 스트링을 받는 질문인데요..
struct str{
char *ptr,
int length
};
이런 구조체가 있다면
우선 유저가 최대로 입력할수 있는 스트링 개수를 정의를 해야 합니다.
예를 들어 100개의 스트링 갯수만큼 입력받고 싶으면
str User_str[100]; 라고 하면 됩니다.
1번째 스트링 : User_str[0].ptr = "abcederer";
2번째 스트링 : User_str[1].ptr = "asdjfklasjdfer";
3번째 스트링 : User_str[2].ptr = "dsafasdfr";
.....
100번째 스트링 : User_str[00].ptr = "the end";
이런식으로 받을수 있습니다.
길이도 마찬가지로 strlen함수를 이용한다면
1번째 스트링 길이 : User_str[0].length = strlen(User_str[0].ptr);
2번째 스트링 길이 : User_str[1].length = strlen(User_str[1].ptr);
........
100번째 스트링 길이 : User_str[99].length = strlen(User_str[99].ptr);
이런식으로 하시면 됩니다. ^^