基本上我有這個數據結構:我怎樣才能返回,如果錯誤 - Visual C
typedef struct Data {
char *str;
int n;
} TData, *AData;
如果我想使用malloc(該變量我把我從一個文件中讀取一個字符串str
分配空間其中,誠實地說,考慮到我的問題的主題並不重要)。因此,我創建了一個功能TData InitData(const char *file_name)
:
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;
}
現在,在我的主要()「函數,我會打這個電話是這樣的:
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語句有效在InitData
函數中?
我知道的其他方式,也可能是推薦的方式方法是,從main
發送TData data
到InitData
作爲AData
類型的參數,改變功能的類型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;',並且始終將其分配到堆上。無論如何,在typedefs後面隱藏poiners是很危險的。 – Deduplicator