如何使用sscanf()
分開輸入?這裏我有一個getline
找到輸入。我之前檢查過輸入,它是正確的,這意味着如果您不結束文件,它可以讀取您輸入的一行。然後我試圖通過使用sscanf();
來分隔您輸入的內容。我應該如何使用sscanf()將行分解爲字段?
- 第一個字段是字符數組沒有長度限制
- 第二字段是具有長度極限的字符數組
- 第三個字段是一個整數
我想是,如果我輸入,例如:
bd_21 abs 124 32152 23415
然後它會打印出bd_21 abs 124
因爲我只sscanf
前三個元素,並把它們放到我指定的字段中。但是,當我運行它,它顯示
段故障:11
我不知道什麼是錯在這裏。任何人都可以解釋如何使用sscanf
來斷線?
我的代碼:
int main() {
char *input = NULL;
size_t len = 0;
char *field1 = NULL;
char field2[33];
int field3;
while(getline(&input, &len, stdin) != EOF){
//printf("%s", input);
sscanf(input, "%s %32s %d", field1, field2, &field3);
printf("%s %s %d\n", field1, field2, field3);
}
return 0;
}
你的'sscanf'調用寫入一個'NULL'指針。沒有[scanf'家族成員](http://en.cppreference.com/w/c/io/fscanf)分配內存。 –
您需要爲'field1'分配空間,或者您需要使用POSIX擴展名'%ms',並且傳遞'&field1',所以['sscanf()'](http://pubs.opengroup.org/onlinepubs /9699919799/functions/sscanf.html)爲您分配內存。 –
談到分配內存,'getline'調用*會分配內存,你忘記了'free',所以你會有內存泄漏。除非重新初始化'input'和'len'變量,否則您將無法讀取更長的行。 –