我試圖使用getline()從鍵盤獲取輸入,將其存儲在一個字符串中,將其標記化,然後打印令牌。當我運行這個時,在最後一次迭代(處理來自輸入的最後一個令牌的迭代)中出現Segmentation Fault錯誤。從getline令牌化輸入
#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
////////////////////////
// Main Method //
////////////////////////
void main() {
system("clear");
int ShInUse = 1; // Represents if shell is in use
char curpath[1024]; // holds current path to print with prompt
char *UserCommand = NULL;
size_t combytes = 100;
UserCommand = (char *) malloc(combytes);
char *tok;
// Main loop that shell uses //
while (ShInUse == 1) {
getcwd(curpath, sizeof(curpath)); // Store initial working dir
printf("gash:%s>", curpath); // print prompt
getline(&UserCommand, &combytes, stdin);
tok = strtok(UserCommand, " \n"); // Tokenize input
if (tok == NULL) {
printf("Enter a command.\n");
} else {
// Exit command //
if (strcmp(tok, "exit") == 0) {
ShInUse = 0;
} else {
while (tok != NULL) {
printf("You entered a command.\n");
printf("tok: %s\n", tok);
tok = strtok(NULL, " \n");
}
}
}
}
free(UserCommand);
}
任何有關可能導致這種情況的想法?調試目前不適合我。
也許你忘了將UserCommand初始化爲NULL? – wildplasser 2013-03-02 19:36:02
逐行註釋出代碼以準確查看段錯誤發生的位置。 – 2013-03-02 19:38:29
@wildplasser感謝您的回覆。我嘗試過,但仍然無法工作。我忘了包括我的字符串declorations,我會將它們添加到我的帖子。 – Greg 2013-03-02 19:39:11