[英]How to correctly store array of strings into array (In C)?
*已編輯*
本質上,在我正在編寫的程序中,我已經初始化了以下內容:
char **cmd[16];
cmd[15] = '\0';
然后,我循環遍歷包含文本行的管道輸入文本文件。 比如我在執行程序的時候會運行./a.out < file.txt
在這個循環中,我將文件的每一行分解為字符串並將它們存儲在char *arguments[]
中。
例如,文本行 "ls -n 5" 創建arguments = {"ls", "-n", "5", NULL}
然后,我根據行號將指向 arguments 的指針分配給 cmd 的索引。 即cmd[line_number] = arguments;
當我退出 while 循環時,我的問題就出現了。 現在 cmd 的每個索引都指向完全相同的東西,因為 arguments 指向的內容已更改。 所以即使我有一個文本文件:
ls -s1
sort -n
ls -n 5
cmd 將包含 3 個 arguments,它們都有最后一行{"ls", "-n", "5", NULL}
我的問題是是否有一種方法可以將 arguments 的當前值分配給 cmd[line_number],而不會在下一次迭代中覆蓋內部的值。
以下是相關代碼:
int main(int argc, char **argv) {
char ** cmd[16];
cmd[15] = '\0';
char buffer[256];
int number_of_lines = 0;
// Initialise arguments
char * arguments[256];
// Read until EOF
while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
// tokenise buffer into arguments
// E.g. "Hello World" => arguments = {"Hello", "World", NULL}
parsecmd(buffer, arguments);
// Points to arguments
cmd[number_of_lines] = arguments;
number_of_lines++;
}
return 0;
}
這里也是 parsecmd function :
void parsecmd(char *buffer, char **arguments) {
// Get Pointer to \n in string
char *newline = strchr(buffer, '\n');
// Remove if found
if (newline) {
*newline = 0;
}
int i = 0;
int token_count = 1;
// token equal to first to first string before whitespace in buffer
char * token = strtok(buffer, " ");
// While tokens remain
while (token != NULL) {
// Store token in arguments
arguments[i] = token;
// Get next token
token = strtok(NULL, " ");
// Increment counters
i++;
token_count++;
}
// Assign all unnasigned variables to NULL
for (i = token_count - 1; i < 256; i++) {
arguments[i] = NULL;
}
}
任何幫助或建議將不勝感激:)
建議更換:
printf("%s\n", cmd[0][0]);
和:
printf("%s\n", args[0]);
因為 output 格式說明符: %s
期望指向字符串的指針,而不是字符串的第一個字符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.