1

大家好,我目前正在使用下面的代码,我很确定有更好的方法来做到这一点。代码的作用是查看是否有分隔符 (~~~~),将 ~~~~ 之前的所有内容放在 cmd 中,将 ~~~~ 之后的所有内容放在 param 中。如果有人能让我知道我应该怎么做,那将不胜感激!我不习惯低级语言,所以字符串和指针仍然让我感到困惑!

谢谢!

char buffer[1024], *tempCharPointer, cmd[100], param[1024];

if(strstr(buffer, "~~~~"))
{
   strcpy(cmd, buffer);
   tempCharPointer = strstr(buffer, "~~~~");
   index = (tempCharPointer-buffer) + 4;
   strcpy(param, &tempCharPointer[4]);
   memmove(&cmd[index-4], "", (index-4));
}
4

4 回答 4

1

您可以按如下方式简化代码:

char cmd[1024], *tempCharPointer, *param = "";
// Fill in cmd from somewhere...
...
char *delim = strstr(cmd, "~~~~");
if(delim)
{
    param = delim+4;
    *delim = '\0';
}
于 2013-03-27T21:22:18.833 回答
0

您可以简化代码并\0在定界符之前插入(修改定界符的第一个字符并使其成为\0),并让 command 成为指向字符串开头的指针,并将参数指向定界符之后的第一个字符的指针。节省你的记忆和所有这些动作等等。

于 2013-03-27T21:20:35.020 回答
0
char buffer[1024], *tempCharPointer, cmd[100], param[1024];

tempCharPointer = strstr(buffer, "~~~~");

if (tempCharPointer){
   *tempCharPointer = '\0';
   tempCharPointer +=4;

    //now buffer points to the first half, and tempCharPointer points to second half
    //do with them what you will
}
于 2013-03-27T21:23:53.167 回答
0

C 库中的strtok函数(从字符串中提取标记)在这里很有用。

下面是一个小例子。man strtok了解更多信息。请注意,strtok_r(在下面使用)用于可重入支持。

#include <string.h>
#include <stdio.h>

int main(const int argc, const char const** argv)
{
    char buffer[1024];
    sprintf(buffer, "~~~~foo~~~~bar~~~~baz");

    char* saveptr = NULL;
    char* token = strtok_r(buffer, "~~~~", &saveptr);
    while(token != NULL)
    {
        printf("TOKEN: %s\n", token);
        token = strtok_r(NULL, "~~~~", &saveptr);
    }
}
于 2013-03-27T21:31:17.420 回答