배열의 첨자에 관해서...

익명 사용자의 이미지

어떤 문자열1을 입력 받아서 strlen()함수로 길이를 구했습니다.

또한 문자열2에다가도 다른 길이의 문자를 입력 받았습니다.

또한 strlen()함수로 길이를 구했습니다.

문제는 arry[]의 크기를 문자열1과 문자열2의 더한 값으로 하고 싶은데

되질 않네요.

예)

char *ptr1 = "abcdef";
char *ptr2 = "aaa";
int num1 = 0;
int num2 = 0;

num1 = strlen(ptr1);
num2 = strlen(ptr2);

char array[num1 + num2];

위와같은 식으로 하고 싶은데... 당연히 안되겠죠? array의 크기를

넣어 줄 수 있는 방법이 있을까요? 위는 그냥 제가 한거고 임의로

문자를 입력 받게 해서 할려고 그러는데...

익명 사용자의 이미지

이런경우 쓰는게 malloc나 calloc죠.

array = (char *)malloc((num1 + num2)*sizeof(char));
이렇게 바꿔주시면 되겠네요.
포인터는 배열처럼 인덱싱 할 수 있는건 아시죠?
처리하고 나서 free 하는거 잊지 마시고요..
그럼..

익명 사용자의 이미지

김석훈 wrote..
어떤 문자열1을 입력 받아서 strlen()함수로 길이를 구했습니다.

또한 문자열2에다가도 다른 길이의 문자를 입력 받았습니다.

또한 strlen()함수로 길이를 구했습니다.

문제는 arry[]의 크기를 문자열1과 문자열2의 더한 값으로 하고 싶은데

되질 않네요.

예)

char *ptr1 = "abcdef";
char *ptr2 = "aaa";
int num1 = 0;
int num2 = 0;

num1 = strlen(ptr1);
num2 = strlen(ptr2);

char array[num1 + num2];

위와같은 식으로 하고 싶은데... 당연히 안되겠죠? array의 크기를

넣어 줄 수 있는 방법이 있을까요? 위는 그냥 제가 한거고 임의로

문자를 입력 받게 해서 할려고 그러는데...

C 문자열에 실제로 필요한 공간은 strlen의 리턴값 + 1 입니다.
마지막에 '\0' = 0 = NULL 을 넣어서 문자열의 끝을 나타내니까요.

문자열을 편하게 다루시려면 ANSI C++ 라이브러리의 string 타입을 쓰시는 걸 권장합니다.

예를 들어,

string str1 = "abcde", str2 = "aaa", str;
str = str1 + str2;
assert (str == "abcdeaaa");
assert (str[4] == "e");
assert (str[5] == "a");

또한 가변 크기의 배열을 쓰시려면,
동적할당 배열 대신 vector 컨테이너의 사용을 권장합니다.

vector vec(num1 + num2);