char[512]와 같은 문자열 배열에 여러가지 정보를 담고싶으데...

ljksky의 이미지

char[512]같은 문자열 배열에 여러가지 정보를 담고 싶거든요.?

예를 들면...

전화번호 15자리
이름 20자리
아이피 15자리
포트 4자리
기타정보 200자리..
..
..
등등...

이렇게 자리수는 정해져있는데..
이런 문자열 배열을
소켓으로 받아 정보를 뽑아내서 사용해고
보낼때는 자리수에 맡게 배열에 넣고..

제 생각엔 구조체를 만들어서 하는게 더 좋은것
같은데.. 여의치 않아서.. 배열로 보내야 합니다..

루프 돌면서 한바이트씩 읽고 쓰는 방법이 떠오르지만..
그 보다 좋은 방법이 있지 않을까 해서 글 올립니다..

command_mode의 이미지

한 번에 다 읽어서 나누실꺼면 memcpy를 사용하시는건 어떠신지..
어차피 루푸야 돌아야 겠지만 그래도 눈에는 안보인다는..
이런거 말씀하신거 아닌가요..?
#include <string.h>
memcpy(void * target, const void * source, size_t nbytes)

char phone[16];
char name[21];
...
memcpy(phone, data, 15);
phone[15] = 0;
memcpy(name, data+15, 20);
name[20] =0;
...

이런거 말씀하신거 아닌가요..?

wooix의 이미지

    char data[512];
    char phone[]="0111234567";
    char name[]="my name....";
    char ip[]="123.456.123.456";
    char port[] = "1234";
    char others[]="ahahahx200";

    int offset=0;
    memcpy(data+offset,phone,15);
    offset+=15;
    memcpy(data+offset,name,20);
    offset+=20;
    memcpy(data+offset,ip,16);
    offset+=16;
    memcpy(data+offset,port,5);
    offset+=5;
    memcpy(data+offset,others,200);

    printf("%s %s %s %s %s\n",data,data+15,data+35,data+51,data+56);

뭐 입력할때 자리 맞춰서 memcpy를 data에 해주시고 읽을땐 data에서 각변수로 받으면 되지 않을까요?

좀무식한가? ㅡㅡa[/code]

평온하다~

neu의 이미지

일단,

typedef struct
{
char name [20];
char gender;
int id;
...
...
} PERSON;

캐릭터 포인터 char * ptr에 PERSON형 구조체 per을 강제 캐스팅해서,

ptr = ( char * ) & per;

ptr을 보내면 됩니다. 포인터가 해답이지용.

최후의 최후까지 바짝 잡고 있어라!

sunyzero의 이미지

padding도 신경쓰셔야겠죠.
전부 char 의 원소로만 되어있다면야 상관없겠지만, int같은 데이터가 있다면 padding 을 신경쓰지 않아주면 안되죠?

========================================
* The truth will set you free.

xyhan의 이미지

음.. 모든 자릿수가 정해 져 있는게 아니라면..
엔드 비트를 인위적으로 집어 넣어주는것도 괜찮을껏
같습미다.. '\n' 같은 걸로 해주면 스트링 함수로 한줄로
읽어 올수 있고 편할껏 같은데요..
다음과 같은 데이타 구조가 될것입미다..
" '1','2','3','\n','고','길','동','\n','a','b','c' ,'\n' "
위에처럼 순서대로 한줄씩 순서대로 뽑아주면
편하지 않을까요... 문자열 구조의 이점을 살려서..
아주 단순한 구조인데..

============================================================

선한 인간이냐 악한 인간이냐는 그사람의 의지에 달렸다. -에픽테토스-
의지 노력 기다림은 성공의 주춧돌이다. -파스퇴르-

============================================================

익명 사용자의 이미지

ljksky wrote:
char[512]같은 문자열 배열에 여러가지 정보를 담고 싶거든요.?

예를 들면...

전화번호 15자리
이름 20자리
아이피 15자리
포트 4자리
기타정보 200자리..
..
..
등등...

이렇게 자리수는 정해져있는데..
이런 문자열 배열을
소켓으로 받아 정보를 뽑아내서 사용해고
보낼때는 자리수에 맡게 배열에 넣고..

제 생각엔 구조체를 만들어서 하는게 더 좋은것
같은데.. 여의치 않아서.. 배열로 보내야 합니다..


구조체를 쓰면 안되는 이유가 있나요?

struct data {
	char phone[16];
	char name[20];
	char ip[16];
	char portno[4];
	char misc[200];
};
icebug의 이미지

컴파일 옵션에 따라 패딩 규칙이 변화가 있기 때문입니다.

choissi의 이미지

컴파일 옵션을 따로 주면 모를까

구조체 멤버가 모두 char 이면..
패딩에 영향을 안받던데요..

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.