는 기본적으로 나는이 데이터 구조를 가지고 : 그 변수에 내가 파일에서 읽은 문자열을 걸었습니다 (malloc에를 사용하여 str
을위한 공간을 할당 할어떻게 반환 할 수 있습니다 - C
typedef struct Data {
char *str;
int n;
} TData, *AData;
솔직히 말해서 제 질문의 주제를 고려하는 것이 중요하지 않습니다.) 따라서, 나는 함수 TData InitData(const char *file_name)
생성 :
int main(int argc, const char * argv[]) {
TData data;
if(!(data = ReadExpression(argv[1]))) {
return 1;
}
// I do something with my data and the program ends.
return 0;
}
내가 return 문이 유효 할 수있는 방법 : 내 '주()'함수에서 지금
TData InitData(const char *file_name) {
TData data;
data.str = malloc(1024);
if (!data.str) {
printf("Allocation error!\n");
// I have no idea what to return here in order to exit the function.
return (...);
}
return data;
}
를,이 같은 통화 뭔가를 만들 것 InitData
함수에? 나 :
나는 다른 방법으로, 아마 권장되는 방법 중 하나는 유형 AData
의 매개 변수로 InitData
에 main
에서 TData data
을 보내 int
에 함수의 유형을 변경 (int InitData(const char *file_name, AData data)
같은으로 초래)하는 것을 알고 단순히 AData
을 사용하십시오.
'return NULL;'아마도? malloc이 그렇듯이. 물론 데이터를'* Tdata'에 대한 포인터로 만들어야합니다. – Evert
함수가'TData' 타입이기 때문에 작동하지 않습니다. 'NULL'을 반환하려면 'void *'또는 포인터 여야합니다. –
자신의 구조에 대한 의미를 직접 정의합니다. 그래서 전리품 가치는 무엇입니까, 아니면 아무 것도 없습니까? 나는'(TData) {0, 0}'을 추측 할 것입니다. 또한 구조체를'typedef struct data {size_t len; char data []} data;'로 정의하고 항상 힙에 할당하는 것을 고려하십시오. 어쨌든 typedef 뒤에 poiners를 사용하지 않는 것은 위험합니다. – Deduplicator