나는 파일에서 읽은 문자열 배열에 대한 포인터를 메서드가 반환하도록 요구하고있는 작업을하고 있습니다. 이 함수는 작동하지만 반환 된 포인터를 main 함수의 변수에 할당하려고하면 null 값의 배열로 끝납니다. 여기에 내 코드입니다 : 정확하게는 { 'B'를 포함 (buildAnsArray에서)C에서 문자열 배열 반환
3
B
20
1101
ansArray '20'을 :
#include <stdio.h>
char **buildAnsArray(){
FILE *in;
int num, i;
in = fopen("data.txt", "r");
fscanf(in, "%d", &num);
char ansArray[10][num];
for(i = 0; i < num; i++){
fscanf(in, "%s", ansArray[i]);
}
return ansArray;
};
main(){
char **ansArray = buildAnsArray();
}
입력 파일 (data.txt로) 내가 함께 일하고 있어요 시작 , '1101'}하지만 ansArray (주)는 비어 있습니다. 모든 것을 main으로 옮기고 포인터를 문자열 배열로 반환하는 것에 대해 걱정할 필요는 없지만 할당을 위해서는 buildAnsArray 함수가 필요하다는 것을 알고 있습니다. 이 문제를 해결하려면 어떻게해야합니까?
가능한 복제본 [C에서 함수의 반환 값에서 캡처되지 않음] (http://stackoverflow.com/questions/23046538/string-is-not-captured-from-return-value-in-function- in-c) – usr2564301
이것은 당신의 문제와 관련이 있다고 확신하지는 않지만 함수에서 포인터를 반환하고 싶다면'malloc'을 사용하여 힙에 배열을 할당해야합니다. 지금 스택에 배열을 만들면 함수 호출 후 결국 정리할 수 있습니다. ( – UnholySheep
) 이것은 여러 가지 형태로 * 많은 * 중복을 가지지 만 궁극적으로는 다음과 같습니다. 자동 변수의 주소 (즉, 함수가 반환되면 더 이상 존재하지 않으므로 * 정의되지 않은 동작 *을 호출합니다). 화재에 로그를 더 추가하면 결과로 생성 된 포인터 유형이 함수의 선언 된 결과 유형과도 호환되지 않습니다 ('char **'는 ** char **]와 동일하지 않습니다 **). 컴파일러가 * * *에 대해 경고하지 않으면 경고 수준을 상당히 높게 설정해야합니다. – WhozCraig