[급질!!!] **string의 내용을 *string2으로 옮기는 방법이요..
글쓴이: kimjkr21 / 작성시간: 일, 2005/04/03 - 5:14오전
제가 프로그램 짜다가
이중포인터에 저장된 스트링을 다시 포인터에 저장해야하는데..
포인터와 이중 포인터간의 구분을 명확하게 못하겠어요..
(예1)
char *str="abcde";
char **str2;
질문 1;
str2로 str의 내용을 복사할수 있을까요?
질문 2;
str로 str2의 내용을 복사할수 있는 방법 없을까요? 원래 str2가 일차원 포인터라면 strcat나 strcpy등등을 사용할수 있을건데, 이 함수들은 일차원 배열을 기본으로해서 처리해주는 함수들이라서 컴파일할때 warning: invalid pointer type..!!!.이라고 뜨거든요..위 두 가지 경우에 대해서 해결할 방법좀 갈켜주세요..상세한 설명좀 부탁드립니다. 책을 봐도 이해가 안가요..ㅜㅜ 포인터는 정말 어려워용..
Forums:
strcpy, strncpy에서 이중포인터를 쓰는 경우아래와 같이 사
strcpy, strncpy에서 이중포인터를 쓰는 경우
아래와 같이 사용합니다.
strcpy(*str2,str)
그리고
int *str="abcde";
int **str2;
대신
char *str="abcde";
char **str2;
로 해보세염.
warning: invalid pointer type..!!!.
이건 이 이유때문에 생기는 겁니다.
굳이 int저를 써야 한다면...
strcpy((char *)*str2,(char *)str)
로 타입케스트를 해주면...
워닝은 사라지겠지만..
결과는 어떨지 모르죠...
There is no spoon. Neo from the Matrix 1999.
일단, 그냥 포인터건 이중 포인터건 3중 포인터건 그것이 가리키는 개체(
일단, 그냥 포인터건 이중 포인터건 3중 포인터건 그것이 가리키는 개체(object)가 실제로 있어야 합니다.
int **pp;
pp가 가르키는 int *형 개체가 있어야 합니다.
int ***ppp;
역시 ppp가 가르키는 int **형 개체가 있어야죠.
문자열을 다룬다면 char *, char ** 가 맞겠지요.
일단 str2가 '실제로 존재하는' char *형 개체를 가리켜야 합니다. 일단은, 새로 할당받아서 쓰기로 합시다.
그다음에는 두가지 방법이 있습니다.
또는
[quote]질문 2;str로 str2의 내용을 복사할수 있는 방
str2에 제대로 메모리가 할당되어 있다는 가정 하에
위 질문.정정합니다..
에고공..죄송합니다..잠오는거 참아가면서 글을 썼더닝...
그만 오타를..위에
int *str가 아니라..char *str 입니다..정말 죄송죄송..ㅜ.ㅜ...
strcpy(*str,str2)이렇게하니깐 워닝이 떠요...
위에답변 해주신분들 넘넘 감사드립니다..^^
조언해주신대로 수정해서 컴팔을 해보니 아래와 같은 워닝이 그대로 뜨더라구요..문제가 무엇인지..ㅜ.ㅜ
"warning; passing arg 1 of 'strcpy'from incompatible pointer type.."
도와주세용.
지리즈님께서 마지막에 쓰신 부분에 보면:[code:1]strcpy&#
지리즈님께서 마지막에 쓰신 부분에 보면:
strcpy((char *)*str2,(char *)str)
이렇게 카피하면 invalid pointer 안나올겁니다.
무조건 도와달라지말고, 답변 써주신 분 성의를 생각해서, 끝까지 잘 읽읍시다.
아울러, segmentation fault 를 대비해서, malloc 도 잘 살펴보세요.
그럼 이만.
삽질의 대마왕...
[quote]"warning; passing arg 1 of 'str
고치신 후의 소스코드를 다시 한번 올려주시길 바랍니다.
--고친후 소스 코드 올립니다. 디렉토리 파일의 정보를 나타내는
char ls_do(int cmd_type)
{
struct dirent *item;
char temp_buf[1000];
DIR *dp;
struct stat st;
cmd type=2;
int return_stat;
dp=opendir("./");
if(dp!=NULL)
{
while(item=readdir(dp))
{
strcat(temp_buf,item->d_name);
printf("(1) %s",item->d_name); //=> 실행결과 디렉토리 및 파일 이름 출력됨.
if(strcmp(item->d_name,".")==0 || strcmp(item->d_name,"..")==0) continue;
if(cmd_type==2)
{
return_stat=lstat(item->d_name,&st);
perror("return_stat"); //=> return stat: illegal seek 에러 출력 후 실행 멈춤..!!
if(return_stat!=-1)
{
strcat(temp_buf,(char*)item->d_ino);
printf("(2) item ino; %s",(char*) item->d_ino);
}
}
}
}
}
위 경고부분을 해결하고 나서 디렉토리 파일의 정보를 나타낼때의 소스부분을 올렸습니다., 주석부분을 친 부분을 보신것처럼, 각 라인별로 실행된 결과를 확인할수 있었습니다. lstat() 에 관하여 실행 도중 "illegal seek" 이라는 에러 메시지를 확인할수 있었는데, 여기저기 찾아봐도, 보통 이렇게 다써도 문제없이 출력이 되는거같은데, 저같은 경우엔 이런 에러 메시지만 뜨고 그 파일 정보의 출력이 안되는군요..음. lstat부분에서 문제가 있는것 같은데, 문법적으론 이상이 없는거같아 보여서요..혹시 다른 문제가 있을까요?
댓글 달기