C 字符串操作,下面的函数做什么?

C 字符串操作,下面的函数做什么?,c,string,C,String,试图弄清楚下一个函数的确切目的是什么 我知道它是在操作字符串-获取字符指针-命令, 正在检查是否有空格或制表符空格。。。但最后我不明白这个函数在做什么 void FixCommand(char* command) { char newCommand[MAX_COMMAND_SIZE + 1]; char* currChar = command; int lastConfirmed = 0; int inputIndex = 0; while ((*curr

试图弄清楚下一个函数的确切目的是什么

我知道它是在操作字符串-获取字符指针-命令, 正在检查是否有空格或制表符空格。。。但最后我不明白这个函数在做什么

void FixCommand(char* command)
{
    char newCommand[MAX_COMMAND_SIZE + 1];
    char* currChar = command;
    int lastConfirmed = 0;
    int inputIndex = 0;
    while ((*currChar == ' ') || (*currChar == '\t'))
    {
        ++currChar;
    }
    while (*currChar != 0)
    {
        if (*currChar != '\n')
        {
            newCommand[inputIndex] = *currChar;
            ++inputIndex;
            if ((*currChar != ' ') && (*currChar != '\t'))
            {
                lastConfirmed = inputIndex;
            }
        }
        ++currChar;
    }
    newCommand[lastConfirmed] = 0;
    strcpy(command, newCommand);
}

程序跳过
命令
字符串中的初始空格/制表符,然后将所有字符复制到
newCommand[]
,跳过“新行”
\n
字符。它还查找
命令
字符串中的换行符(空格或制表符),记下它看到的最后一个非空字符,并标记其位置。最后,将
命令中从第一个非空到最后一个非空的部分复制回
命令中,并删除
\n
字符

例如,如果传入的命令字符串如下所示:

"    quick brown\nfox\tjumps over the\tlazy dog\t "
"quick brownfox\tjumps over the\tlazy dog"
然后输出将如下所示:

"    quick brown\nfox\tjumps over the\tlazy dog\t "
"quick brownfox\tjumps over the\tlazy dog"

它的目的可能是在将命令字符串传递到不允许使用
\n
和前导/尾随空格的外部系统之前对其进行“清理”。

当您写入“\n”时,您是指新行吗?@Yuval是的,
\n
表示C中的“新行”字符。但是如果我使用此字符串操作函数:“hello\nworld”它将占用第一个空格,并且不处理中的“\n”middle@Yuval这不是我所看到的:“
\n
被删除,这是应该的。@Yuval您是在命令行上传递字符串,还是从C代码传递字符串?
\n
序列仅在编译代码中成为单个“新行”字符;在命令行上,它保留两个字符-\和n。