簡體   English   中英

如何正確地將字符串數組存儲到數組中(在 C 中)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM