为什么我不能以下列方式使用strcpy()和strtok()

时间:2014-02-17 00:49:05

标签: c string

我是一名新的C程序员,所以你必须原谅我缺乏知识。慢慢但肯定我正在改善。我想知道为什么我不能使用以下代码来尝试删除' / n'抓取用户输入时fgets引入了。它在第一个打印语句后中断。我觉得好像在做一些危险的事情,但我不确定是什么。

if (fgets(rawCommand, sizeof (rawCommand), stdin)) {

    printf( "\nTest: %s\n", rawCommand ); //test print
    strcpy( rawCommand, strtok( rawCommand, '\n') ); //to get rid of the '\n' that fgets introduces
    rawCommand[ strlen(rawCommand) - 1 ] = '\0';
    printf( "\nTest: %s\n", rawCommand ); //test print

所有建议都表示赞赏,但请保持建设性。感谢。

1 个答案:

答案 0 :(得分:0)

您的大部分代码都是正确的。但是strcpy()strtok()都不需要。要抛弃潜在的尾随换行符,请考虑以下事项:

size_t len = strlen(rawCommand);
if (len && rawCommand[len-1] == '\n')
    rawCommand[len-1] = 0;

正如我在评论中所说。好的工作检查NULL返回表单fgets()