문자열 뒤에 문자를 추가하는 방법은 없나요..?
글쓴이: 익명 사용자 / 작성시간: 금, 2017/06/02 - 11:20오후
void main()
{
char *pt[2];
char a[2][3]={1,2,3,4,5,6};
pt[0]= (char*)calloc(sizeof(char),100);
pt[1]= (char*)malloc(sizeof(char)*100);
pt[0]="가나다";
printf("%d\n",strlen(pt[0])); //6
printf("%s\n",pt[0][6]); // null
pt[0][strlen(pt[0])] = '.';
pt[0][strlen(pt[0])+1] ='\0' ;
printf("%s\n",pt[0][6]);
}
이런식으로 해서 가다나뒤에 . 을 추가해주고싶은데 되질않네요... 머가잘못된걸까요?
Forums:
1. 코드는 < code > 태그로 감싸주세요.
1. 코드는 < code > 태그로 감싸주세요.
2. 답이 안 달린다고 몇 시간만에 새 글을 쓰셔봤자 다 첫화면에 그대로 있습니다
calloc으로 할당받는 공간에 "가나다"라는 문자열을 기록하고 싶다면 strcpy() 함수를 쓰세요.
그 뒤에 다른 문자열을 덧붙이는 건 strcat() 함수가 있습니다.
좋은 하루 되세요!
아 제가 예를 잘못들었네요
원래 대로는 scanf 로 가나다를 입력받아서 저기에 저장하는건데 scanf(%s,ptr[0]); 이런식으르오요 이때도 그냥
strcat쓰면 되겠죠?
strcat이 일반적으로 좋은 해결책입니다.
strcat이 일반적으로 좋은 해결책입니다.
다만 Schlemiel the Painter's algorithm을 구현하지 않도록 주의하세요.
https://en.wikipedia.org/wiki/Joel_Spolsky#Schlemiel_the_Painter.27s_algorithm
그리고 아래 코드는 일반적으로 동작하지 않습니다.
strlen
함수는 NUL 문자를 찾는 방식으로 동작한다는 걸 숙지하시고 다시 보세요.으 음??
아!
그니까 위에 .이 연결된후에는 널이 없어지니까 아래서 널값을 찾질못하니 strlen이 정상작동되지않겠군요!
그리고 스캐미컬 내용도 읽어봤는데 시스템동작에러가 아니라 속도가 점점 늘어진다는걸로 이해했는데 맞나요?
abc, def, ghi 를 concat 한다고
abc, def, ghi 를 concat 한다고 생각해보세요.
1. abc의 끝을 알기 위해 맨 처음 위치(a)로 가서 길이를 알아낸다(3)
2. 알아낸 길이 값을 사용하여 def를 뒤에 붙인다.
3. ghi를 붙이기 위해 이전 버퍼의 끝을 알기 위해 다시 맨 처음위치(a)로 가서 길이를 알아낸다(6)
4. 알아낸 길이 값을 사용하여 ghi를 붙인다.
concat 해야할 문자열의 갯수가 늘어날 수록 길이값을 알아오는 연산도 점차 늘면서 배보다 배꼽이 커지게됩니다
댓글 달기