00 src 크기 만큼의 포인터형 char배열을 만든 뒤 복사를 해줍니다. 문자열 배열이니 마지막에 널도 넣어주고 문자열배열 주소를 반환
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *ft_strdup(char *src)
{
int i;
int j;
char *dest;
j = 0;
i = 0;
while (src[i])
i++;
dest = (char *)malloc(sizeof(char) * (i + 1));
if (!dest)
return (NULL);
while (src[j])
{
dest[j] = src[j];
j++;
}
dest[j] = '\0';
return (dest);
}
int main()
{
char as[10]="gege";
printf("%s\n",strdup(as));
printf("%s\n",ft_strdup(as));
printf("%ld\n", strlen(strdup(as)));
return (0);
}
malloc 헤더는 stdlib.h
strdup 헤더는 string.h
NULL 아님 - 정상적으로 복제한 문자열
NULL -문자열 복제가 실패하였으며, 상세한 오류 내용은 errno에 설정됩니다. ENOMEM : 문자열 복제를 위한 메모리 할당에 실패하였습니다.
출처: https://www.it-note.kr/78 [IT 개발자 Note]
01 min에서부터 max 크기까지 int 배열을 생성하고 그 사이 값들로 채워 나간다.
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_range.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: minjeoki <minjeoki@student.42seoul.kr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2021/03/10 04:35:24 by minjeoki #+# #+# */
/* Updated: 2021/03/10 04:52:12 by minjeoki ### ########.fr */
/* */
/* ************************************************************************** */
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int *ft_range(int min, int max)
{
int *tmp;
int i;
i = 0;
if (min >= max)
return (NULL);
tmp = (int *)malloc(sizeof(int) * (max - min));
while (min < max)
{
tmp[i] = min;
min++;
i++;
}
return (tmp);
}
int main()
{
int min=13;
int max=50;
int *array;
array = ft_range(min, max);
int i = 0;
while(array[i])
{
printf("%d\n", array[i]);
i++;
}
}
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_ultimate_range.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: minjeoki <minjeoki@student.42seoul.kr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2021/03/10 04:54:58 by minjeoki #+# #+# */
/* Updated: 2021/03/10 05:27:20 by minjeoki ### ########.fr */
/* */
/* ************************************************************************** */
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int ft_ultimate_range(int **range, int min, int max)
{
int *tmp;
int i;
i = 0;
if (min >= max)
return (NULL);
*range = (int *)malloc(sizeof(int) * (max - min));
if (!range)
return (-1);
while (min < max)
{
tmp[i] = min;
min++;
i++;
}
return (max - min);
}
int main()
{
int min=13;
int max=50;
int *array;
int *range[6][6];
array = ft_ultimate_range(int *range, min, max);
int i = 0;
while(array[i])
{
printf("%d\n", array[i]);
i++;
}
}
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_ultimate_range.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: minjeoki <minjeoki@student.42seoul.kr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2021/03/10 04:54:58 by minjeoki #+# #+# */
/* Updated: 2021/03/10 14:07:47 by minjeoki ### ########.fr */
/* */
/* ************************************************************************** */
#include <io.h>
#include <stdlib.h>
#include <stdio.h>
int ft_ultimate_range(int **range, int min, int max)
{
int i;
int *tmp;
i = 0;
if (min >= max)
return (0);
tmp = (int *)malloc(sizeof(int) * (max - min));
while (min < max)
{
tmp[i]=min;
min++;
i++;
}
if(!*range)
return (-1);
*range=tmp;
return (i);
}
int main(void)
{
int *range;
int i;
i = 0;
printf("return : %d\n", ft_ultimate_range(&range, 40, 50));
while (i < 55)
{
printf("%d\n", range[i]);
i++;
}
return (0);
}
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_ultimate_range.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: minjeoki <minjeoki@student.42seoul.kr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2021/03/10 04:54:58 by minjeoki #+# #+# */
/* Updated: 2021/03/10 16:09:00 by minjeoki ### ########.fr */
/* */
/* ************************************************************************** */
#include <io.h>
#include <stdlib.h>
#include <stdio.h>
int ft_ultimate_range(int **range, int min, int max)
{
int *tmp;
int i;
i = 0;
if (min >= max)
return (0);
tmp = (int *)malloc(sizeof(int) * (max - min));
if (!tmp)
return (-1);
while(min < max)
{
tmp[i]= min;
min++;
i++;
}
*range = tmp;
return (i);
}
int main(void)
{
int *range;
int i;
i = 0;
printf("return : %d\n", ft_ultimate_range(&range, 0, 2147483648));
/*while (i < 50-40)
{
printf("%d\n", range[i]);
i++;
}*/
return (0);
}
min >= max 이면 리턴 영
tmp 배열 생성
제대로 tmp 생성 안되면 -1
tmp에 min부터 ++하믄서 대입 i세고 c총 갯수 리턴ㅡ