2011-11-23 1 views
-1

나는 세그먼트로 분할 한 200 개의 문자열을 가지고 있고이 세그먼트를 2 차원 문자로 넣으려는 시도가 있습니다 배열 또는 함수를 통해 문자열에 대한 포인터의 배열. 나는 성공적으로 이것을 main에서 할 수 있지만, 문자열과 2d char 배열 또는 포인터 배열을 함수에 문자열로 전달할 때 작동하지 않는다. 함수 내에서 2 차원 배열을 인쇄하면 모든 것이 완벽하게 작동한다는 것을 알 수 있습니다.하지만 반환 된 배열을 main에 인쇄하면 최종 값만 다음과 같이 인쇄됩니다. 함수를 통해 문자열 배열 또는 문자열 포인터에 값을 입력 할 수 없습니다.

단순화 된 코드 샘플 출력

이하이다

void func(char *buffer, char **file_list) 
{ 
    /*split buffer into segments*/ 
    Strcpy((*file_list + i), segment); 
    Printf(“i = %d file_list = %s \n”,i, (*file_list + i)); /* this prints the segments perfectly*/ 
} 

Main() 
{ 
    Func(buffer, file_list); 
    For(i=0;i<n;i++) 
    Printf(“i= %d,split lines in main is %s\n”,i,(*file_list +i)); 
} 

"FUNC"내부의 printf 출력은 다음

Segment one 
Segement two 
…… 
Segment n 

주에서의 printf 출력은 다음

Segment n 
Segment n 
….. 
Segment n 

부 아래에서 더 자세히 설명합니다. 변수 선언 목록을 볼 필요가 없다고 가정합니다.

버퍼가 원래 문자열 배열에 대한 참조 인 경우 포인터를 참조로 전달하려고 시도했음을 유의하십시오. 그런 다음 임시 문자열이 아니라 해당 문자열을 가리키고 있습니다. 그러나 나는 임시 변수에 대해 많이 알지 못한다. 함수의

Void func(char *buffer, char **file_list) 
{ 
    newline=strstr(buffer,"\r\n");  
    while (newline != NULL && (newline-buffer)< READ_SIZE) 
    { 
     temp_var=newline; 
     newline=strstr(newline + 1,"\r\n"); 
     if(newline !=NULL)  
     { 
      strncpy((*file_list+i),temp_var,(newline-temp_var)); 
      printf("i= %d, file_list is %s\n",i, (*file_list+i)); 
     } 
    } 
} 

Main() 
{ 
    Char *buffer = (char *) malloc(200*sizeof(char)); 
    Char **file_list= blah blah …. 

    /* put 200 char string in buffer*/ 

    /*file_list is still empty call func to fill it up*/  

    Func(buffer,file_list); 
    For(i=0;i<n;i++) 
     printf("i= %d, file_list is %s\n",i,(*file_list+i)); 
} 

인쇄 출력은 다음 주부터

i=0 file list is "segment one" 
i=1 file list is "segment two" 
.... 
i=n file list is "segment n" 

인쇄 출력은 다음과 같습니다 당신이 하나의 당신의 세그먼트가 아닌 그들 모두를 복사하는 것처럼

i=0 file list is "segment n" 
i=1 file list is "segment n" 
.... 
i=n file list is "segment n" 
+0

"단순화 된"것은 아니며, 이는 잘못된 프로그램입니다. 컴파일하고 실행하고 오류를 보여주는 스 니펫을 게시하십시오. –

+0

답변 해 주셔서 감사합니다. 자세한 코드를 추가했습니다. 더 필요하면 더 알려주세요 –

+0

내 -1을 취소하지 않았습니다. 명백한 구문 오류가있는 프로그램을 게시하면 안됩니다. –

답변

0

이 보인다. func 전화가 for 루프가 되려고 했습니까?

+0

답변 해 주셔서 감사합니다. 예, for 루프 형태입니다. 그렇지 않으면 함수 내에서 모든 file_list [i] 변수를 올바르게 인쇄 할 수 없습니다. 내가 main에있는 함수 밖에서 파일리스트를 인쇄하려고 할 때 위에 언급 한 방법으로 복사 된 마지막 값만 출력합니다. –

+0

어쨌든 고맙겠지 만 내 문제는 내가 포인터 문자에 내 포인터에 잘못된 표기법을 사용하고 있다는 것을 발견했기 때문에이 질문을 닫고 싶습니다. –

1

답장을 보내 주셔서 감사합니다. 그 문제는 잘못된 방식으로 함수에서 데이터를 반환하는 것과 관련이 없지만 포인터 배열에 대한 포인터에 잘못된 표기법을 사용했기 때문에 발생했습니다. 그러나 웹에서 상충되는 정보가있는 것처럼 함수에서 데이터를 반환하는 데 좋은 참조가 있으면 좋을 것입니다. 예를 들어, 포인터를 참조로 전달할 포인터를 선언 할 필요가 있다고 생각하지 않습니다. 적어도 실험을 통해 참조로 일반 변수를 전달하는 것과 같은 방법으로 포인터 배열에 대한 포인터를 함수에 전달하지 않고 포인터 배열 값을 변경할 수 있음을 발견했습니다.

관련 문제