Странное поведение

Я пытался использовать 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, это не происходит, но когда я использую рыбу, я получаю следующее:

Я никогда раньше такого не видел, у кого-нибудь есть совет? Это просто причуда рыбы?

1 ответ

Решение

Я преобразовал ваш код в этот SSCCE ( краткий, автономный, правильный пример):

#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>>

Я тестировал GCC 4.8.1 на Mac OS X 10.8.4, но получил тот же результат с GCC, поставляемым Apple (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() адаптируя этот тест и показывая результат. Обратите внимание, как код использует << а также >> окружить строку, которую он печатает; если там есть новая строка, она будет отображаться в двойных угловых скобках.

Другие вопросы по тегам