[英]Seg fault with struct behavior
我目前有一個用於存儲端口和目標地址信息的結構,我想用一個簡單的文本文件讀取數據。
typedef struct {
int listen_port;
int forward_port;
char *forward_addr;
} Route;
如果我只是分配30它工作正常。
例如
while((read = getline(&line, &length, f)) != -1) {
Route *srv = (Route*) malloc(sizeof(Route));
srv->listen_port = 30; //works fine
/* rest of code */
}
但是,如果我嘗試使用strtok
來標記從文件80,127.0.0.1,8080
讀取的行,然后將其分配給srv->listen_port
, srv->listen_port
出現seg錯誤。
例如
while((read = getline(&line, &length, f)) != -1) {
int port = atoi(strtok(line, ","));
Route *srv = (Route*) malloc(sizeof(Route));
srv->listen_port = port; //seg fault
/* unreachable code */
}
有人可以解釋為什么會這樣嗎? 我很難過為什么它不起作用。
提前致謝。
看到
此外,如果line是一個零長度字符串,strtok只能返回NULL,因此可能有atoi(NULL)
這段代碼的行為可能是如此不明確......
1)將行初始化為NULL,getline將為您分配空間(如果它不是NULL,它將假定您已經分配了它)
2)使用后自由行
3)使用strtol或scanf來獲取整數,因為你和編譯器不能確定輸入行將包含ascii數字中的數字
4)檢查malloc的返回值,如果失敗則返回NULL
作為一般規則,處理每個可能的錯誤情況,這是C中必要的最佳實踐
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.