我一直在尝试使用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()
编辑:它似乎是一个与shell有关的问题,毕竟它似乎也不是换行符,因为当我使用bash时它不会发生,但是当我使用fish时,我得到以下内容:
我以前从未见过这种事,有没有人有任何建议?这只是鱼的怪癖吗?
答案 0 :(得分: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()
中有换行符。请注意代码如何使用<<
和>>
来包围正在打印的字符串;如果那里有换行符,它将显示在双尖括号内。