必须有一个更好的方法来减少

时间:2013-03-27 21:18:25

标签: c

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

谢谢!

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 个答案:

答案 0 :(得分:1)

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

char cmd[1024], *tempCharPointer, *param = "";
// Fill in cmd from somewhere...
...
char *delim = strstr(cmd, "~~~~");
if(delim)
{
    param = delim+4;
    *delim = '\0';
}

答案 1 :(得分:0)

您可以简化代码并在分隔符之前插入\0(修改分隔符的第一个字符并使其成为\0)并使命令成为指向字符串开头的指针并且参数为a指向分隔符后第一个字符的指针。保存你的记忆和所有这些动作等。

答案 2 :(得分: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
}

答案 3 :(得分: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);
    }
}