Q&A

  • [질문] String 최대 길이?
string 변수의 최대 길이가 얼마인가요?
Length 함수로 길이 반환시 최대값 한계가 있나요?

길이가 상당히 긴 문자열을 처리하려고 하는데 처리할 수 있는 최대 길이가 궁금합니다

답변 부탁 드립니다~
6  COMMENTS
  • Profile
    시니 2010.04.16 18:21
    ...
    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);

    이런식으로 하시면 됩니다. ^^
  • Profile
    박제홍 2010.04.16 19:22
    지정된 스트링 길이를 알아내는 법을 질문하신 것이 아니라, 시스템 내에서 사용가능한 스트링의 최대 길이를 질문하신 것 같은데 ^^;;
  • Profile
    최유준 2010.04.16 19:38
    델파이 질문에 왠 C 답변이 올라온거죠??
    답변은 정성스레 올리셨지만..내용은 좀 당황스럽네요.
  • Profile
    구창민 2010.04.16 20:25
    윈도우즈 32비트 버전에서 어플리케이션에게 할당되는 메모리의 크기는 2GB 로 알려져있습니다.

    스트링의 크기도 그에 해당되며 2GB 를 사용할 수 있겠으나, 시스템에서 지원되는 크기만큼이라 보시면 되겠습니다.

    참고로, 스트링은 인스턴스가 아니라 스트링의 시작번지를 가지고 있는 변수라 생각하시면 되겠습니다.

    그럼 즐거운 프로그래밍 하세요~
  • Profile
    이재욱 2010.04.16 21:51
    답변 감사합니다. ^^
  • Profile
    폐기처분中 2010.04.19 08:42
    시니님께서 올려주신 답변은 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
    으로 나오는군요.
    아무래도 델파이 버전에 따라서 약간씩 차이가 날 수도 있을듯 하니...사용하고 계시는 델파이의 도움말을 참고해보시는게 어떨까 합니다.
    • 이재욱
    • 2010.04.16 18:03
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 시니
      2010.04.16 18:21
      ... string은 char형들의 나열이라고 생각하시면 됩니다. char str; // str이라는 변수는 1바이트로...
    • 박제홍
      2010.04.16 19:22
      지정된 스트링 길이를 알아내는 법을 질문하신 것이 아니라, 시스템 내에서 사용가능한 스트링의 최대 길...
    • 최유준
      2010.04.16 19:38
      델파이 질문에 왠 C 답변이 올라온거죠?? 답변은 정성스레 올리셨지만..내용은 좀 당황스럽네요.
    • 구창민
      2010.04.16 20:25
      윈도우즈 32비트 버전에서 어플리케이션에게 할당되는 메모리의 크기는 2GB 로 알려져있습니다. 스트...
    • 이재욱
      2010.04.16 21:51
      답변 감사합니다. ^^
    • 폐기처분中
      2010.04.19 08:42
      시니님께서 올려주신 답변은 C에 해당하는 내용인지라 Pascal 을 언어로 쓰는 델파이에는 맞지 않습니다....
    • 신주용
      2010.04.16 18:16
      <!--CodeS--> 아...저도 그런 경험있습니다 전에 하다가 프로젝트 드롭되서 잊고 있었는데... ...
    • 정재현
    • 2010.04.16 17:56
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이유신
    • 2010.04.16 17:34
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 시니
      2010.04.16 18:22
      텍스트로된 파일의 행단위 정렬을 할때 사용하는 명령어이다. 복잡한 워드문서등의 편집이 아닌 간단한...
    • 이유신
      2010.04.17 00:14
      위의 해결책은 리눅스 명령이이네요 그런데 저의 문제점은 text file에 우선 field라는 개념이 없습니다...
    • 땅콩맨
      2010.04.17 07:12
      아니면 원하는 Column부분을 Sort할 수 있는 프로그램을 직접 제작하시는것은 어떠세요?
    • 황재훈
    • 2010.04.16 15:09
    • 8 COMMENTS
    • /
    • 0 LIKES
    • 송재호
      2010.04.16 16:42
      헛.. 저도 정말 필요한 방법인데.. 꼭 아시는 분 있음 답변 주셨으면 좋겟네요~
    • 하기
      2010.04.16 17:47
      RS232C통신을 이용하시면 된다고 하는거 같던데요...
    • 지나가는이
      2010.04.16 21:57
      232통신을 이용하면 read이벤트에서 읽은값이 string으로 넘어오니까. 커서위치하고는 상관이 없고 p...
    • 멋쟁이
      2010.04.16 23:02
      타이머에서 주기적으로 커서를 옮겨주는건 어떤가요?
    • 황재훈
      2010.04.17 02:59
      usb용 핸드스캐너는 그냥 바코드를 읽으면 수치로 표시됩니다 문자나 숫자를 입력할수 있는 곳이면 어디...
    • 델초
      2010.04.17 03:16
      위에 분도 말씀하셨지만 바코드 스케너를 시리얼 통신 방식(RS232C) 의 장비를 사용하셔야 합니다. ...
    • 땅콩맨
      2010.04.17 06:37
      델초님 말씀대로 RS232 방식에서 처리되는 핸드스캐너 프로그래밍방법을 찾아보면서 질문하신 문제가 R...
    • • • •
    • Conan
    • 2010.04.16 10:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.04.16 10:32
      폼에 Acrobat ActiveX Control을 올려놓고 unit Unit1; interface uses Windows, Messages, S...
    • 신차돌
    • 2010.04.16 08:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2010.04.16 06:50
      프로젝트의 형태를 DLL 로 만드신것 아닌지요? EXE 로 하셔야 그냥 실행 됩니다. 그리고 윈도우 7이신...
    • 김재훈
      2010.04.16 07:25
      저의 경우 윈도우 7에서 델파이7과 2007을 사용중인데 델파이 7은 에러가 간혹 생기곤 하는데 2007은 괜...
    • 윤성철
      2010.04.16 08:03
      두분 답변 감사드립니다. 많은 도움이 되었습니다. ^^
    • 델파이2
    • 2010.04.16 01:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 우용우
      2010.04.16 20:25
      델파이 코딩인지 패스트리포트 코딩인지 정확히 하셔야 하겠지만 일단 패스트리포트 코딩이라고 가정...
    • cos
    • 2010.04.16 07:15
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이길남
      2010.04.16 18:21
      OnDrawColumnCell 이벤트를 사용하시면 될꼬 같습니다. 물론, DefaultDrawing는 False로 해주시고요.
    • 김정원
      2010.04.16 18:51
      DBGrid에서 DrawDataCell 이벤트에 Canvas에서 컬러를 바꾸고 DBGRID.DefaultDrawDataCell() 에서 바꿔주...
    • 임우식
      2010.04.20 03:42
      아 감사합니다.^^ 해결되었습니다.
    • 이민규
    • 2010.04.14 02:48
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.04.14 08:21
      Multicast서비스를 하는것 같지 않은데 왜 Server컴포넌트를 쓰시는지요? 단말쪽에서는 IdIPMCastClient...
    • 이민규
      2010.04.14 21:42
      조언 감사합니다. 송신쪽에서는 데이터를 계속 보내는데 수신쪽 수정을 담당한 제가 처리가 늦어 데이...
    • 최용일
      2010.04.15 00:06
      VLC를 이용해서 먼저 테스트해보세요. IGMP버전등을 확인해보시구요. http://www.videolan.org/vlc/down...
    • 이민규
      2010.04.16 19:08
      감사합니다....IdIPMCastClient를 이용하고 네트워크 팀과 이것저것 확인하다보니.. 해결되었습니다.......
    • 얼씨구
    • 2010.04.14 02:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 땅콩맨
      2010.04.14 07:05
      TComport 컴포넌트를 사용해보세요. <!--CodeS--> procedure TF_bs10.ComPort1RxChar(Sender: ...
    • 땅콩맨
      2010.04.14 06:45
      폼의 속성중에서 DoubleBuffered속성을 True로 바꿔보시길~
    • 화담선생
      2010.04.15 01:20
      물론.... 바꾸어 봤습니다.... Form 이건 Panel 이건......
    • 땅콩맨
      2010.04.15 07:06
      WM_ERASEBKGND 메시지나 DoubleBuffered 속성때문인것 같은데 왜 그럴지... 흠...