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