大家好,我现在正在使用下面的代码,我非常确定这是一个更好的方法。代码的作用是查看是否有分隔符(~~~~),将所有内容放在~~~~ 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));
}
答案 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);
}
}