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

ここstrtokでは、C ライブラリの関数 (文字列からトークンを抽出する) が役立ちます。

以下に小さな例を示します。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 に答える
0

コードを簡素化\0し、区切り記号の前に挿入し (区切り記号の最初の文字を変更して にします\0)、command を文字列の先頭へのポインタにし、param を区切り記号の後の最初の文字へのポインタにすることができます。メモリとこれらすべての動きなどを節約します。

于 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 に答える