0

多項式微分のプログラムを書くために strtok を使用しようとしていますが、奇妙な動作をしているようです。この時点で、文字 ' '、[、]、(、および ) で停止するように指示しました。しかし、何らかの理由で、「Hello[]」などの入力を渡すと、「Hello\n」が返されます

ここで私のコードに何か問題がありますか? 多項式文字列はすべてテキスト「Hello[]」です

void differentiate(char* polynomial) 
{
    char current[10];
    char output[100];

    strncpy(current, strtok(polynomial, " []()/\n"), 10);
    printf("%s", current);

} // differentiate()

編集:これはシェルに関連する問題のようであり、bash を使用すると発生しないため、結局改行ではないように見えますが、魚を使用すると、次のようになります。

ここに画像の説明を入力

こんなの見たことないんだけどアドバイスある?これはただの魚の癖ですか?

4

1 に答える 1

2

あなたのコードをこの SSCCE ( Short, Self-Contained, Correct Example ) に変換しました:

#include <string.h>
#include <stdio.h>

static
void differentiate(char* polynomial) 
{
    char current[10];

    strncpy(current, strtok(polynomial, " []()/\n"), 10);
    printf("<<%s>>\n", current);

}

int main(void)
{
    char string[] = "Hello[]";
    printf("Before: <<%s>>\n", string);
    differentiate(string);
    printf("After:  <<%s>>\n", string);
    return 0;
}

実際の出力:

Before: <<Hello[]>>
<<Hello>>
After:  <<Hello>>

Mac OS X 10.8.4 で GCC 4.8.1 を使用してテストしていましたが、Apple 提供の GCC ( i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)) およびclang( Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)) で同じ結果が得られました。

strtok()このテストを適応させて出力を表示することにより、改行を取得したという主張を正当化する必要があります。コードがどのように<<andを使用して、>>出力する文字列を囲むかに注意してください。そこに改行がある場合は、二重山括弧内に表示されます。

于 2013-09-02T01:42:14.310 に答える