只是與strtok和strcmp有點問題。strtok返回字符串?
我試圖通過與fgets一些預定要比較的字符串用戶的輸入:
char *token[100];
fgets(s, sizeof(s), stdin)
token[0] = strtok(s, " "); // Get first word
printf("tok: %s", token[0]);
printf("cmp: %d\n", strcmp(token[0], "/bin/echo");
顯然,這是不是所有的代碼,但是這顯示了我的問題 - 如果我輸入「/斌/回聲。 ..「(或任何事情),它將被放入令牌[0]中,並打印出來。它打印正確,但是當它打印cmp值時,它從不爲0.對於/ bin/echo,出於某種原因,cmp值爲1。
謝謝。
編輯澄清混淆S和令牌:
char s[1024];
char *token[100];
EDIT 2 - 增加了一些其他的測試情況: 我輸入 「/斌/回聲世界你好」,以標準輸入
token[0] = strtok(s, " \n\0"); // Get first word
printf("token[0] is: %s", token[0]);
printf("cmp: %d\n", strcmp(token[0], "/bin/echo"));
輸出:
token[0] is: /bin/echo
cmp: 1
然後我試着硬編碼字符串:
char str[] = "/bin/echo hello world";
token[0] = strtok(str, " ");
printf("token[0] is: %s", token[0]);
printf("cmp: %d\n", strcmp(token[0], "/bin/echo"));
輸出:
token[0] is: /bin/echo
cmp: 0
我們可以從編譯的代碼開始。 (在'fgets()'之後缺少半,沒有's'的聲明,在第二個'printf()'時沒有關閉paren,只是爲了命名我任意看到的那些)。然而,真正失蹤的部分是's'。最好是某種有效的內存緩衝區。 – WhozCraig
這就是說,我修正並運行了這段代碼,聲明's'爲本地緩衝區'char s [100];'並且輸入代碼爲「/ bin/echo madness」。它運行良好,報告爲'0'作爲比較結果,所以無論你的問題是什麼,這個代碼不會展示它(超出編譯錯誤,無論如何)。 – WhozCraig
我懷疑你輸入_only_'「/ bin/echo」'。然後你得到''/ bin/echo \ n''這個標記,因爲'fgets'包含換行符。 –