我想分割一個字符串到標記來創建一個參數參數的數組。我目前的執行情況如下(path
是通向用戶的可執行文件正在被讀取的可選參數):將字符串解析爲C中的標記 - 發生了什麼問題?
// ARG_MAX as defined in limits.h
int execute(char *exe) {
printf("args to %s: ", exe);
char *args = malloc(ARG_MAX);
scanf("%s", args);
char *argv[ARG_MAX];
int i = 0;
argv[i++] = exe;
while ((argv[i] = strsep(&args, " \t")) != NULL) {
i++;
}
free(args);
execv(exe, argv);
return 0;
}
什麼困惑我是從我的strsep
理解爲預期這應該是工作,並且它在某種程度上在測試時準確地將tokens[0]
分配爲path
和tokens[1]
爲什麼tokens_s
直到第一個空格字符爲止。
但是,如果在輸入另一個參數後出現空格,則不會將其分配到tokens[2]
等等中以用於後續參數。
當我使用strsep
時,我似乎無法發現它是我做錯了什麼,而不會導致所需的功能?
輸入: exe = "/usr/bin/ps"
args = "-e -l"
輸出: exec ps -e
'的scanf( 「%S」,參數);'不保存''\ t''也不空格放入'args'。使用'fgets()'。建議張貼您使用的輸入。 – chux
已添加輸入。已嘗試使用'fgets()',但在提示我在命令行輸入參數的地方,它只是繼續而不提示? – transiti0nary
由於這篇文章缺少完整的可編譯代碼,它只是讓它比需要幫助更難。添加'fgets()'可能是一個問題,因爲其他代碼仍在使用'scanf()'。強烈建議發佈一個完整的最小代碼來顯示問題。 – chux