나는 세그먼트로 분할 한 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"
"단순화 된"것은 아니며, 이는 잘못된 프로그램입니다. 컴파일하고 실행하고 오류를 보여주는 스 니펫을 게시하십시오. –
답변 해 주셔서 감사합니다. 자세한 코드를 추가했습니다. 더 필요하면 더 알려주세요 –
내 -1을 취소하지 않았습니다. 명백한 구문 오류가있는 프로그램을 게시하면 안됩니다. –