7

文字列があり、5 番目の場所から最後の場所までのサブ文字列が必要です。どの機能を使用すればよいですか?

4

7 に答える 7

6

ヘッダーファイルmemcpy()にある関数を使用できます。string.h

memcpy()バッファと呼ばれることもあるメモリブロック間でデータのバイトをコピーします。この関数は、コピーされるデータのタイプに関係なく、正確なバイト単位のコピーを作成するだけです。関数のプロトタイプは

void *memcpy(void *dest, void *src, size_t count);

引数 dest と src は、それぞれ転送先と転送元のメモリ ブロックを指します。count は、コピーするバイト数を指定します。戻り値は dest です。

メモリの 2 つのブロックがオーバーラップすると、関数が正しく動作しない可能性があります。コピーされる前に、src 内のデータの一部が上書きされる可能性があります。次に説明する関数を使用して、memmove()オーバーラップするメモリ ブロックを処理します。memcpy()以下のプログラムでデモンストレーションします。

これらの関数の例もここにあります: http://www.java-samples.com/showtutorial.php?tutorialid=591

于 2012-05-10T08:25:38.133 に答える
6

元の文字列を他に使用しない場合は、&s[4]直接使用できます。コピーが必要な場合は、

char new_str[STR_SIZE + 1] = {0};
strncpy(new_str, &s[4], STR_SIZE);
于 2012-05-10T08:22:54.547 に答える
2

部分文字列を取得する文字列内の文字もわかっている場合は、strstr 関数を使用できます。部分文字列を見つけます。ただし、取得したい文字がわからない場合は、Eric が述べたように、strcpy または strncpy を使用して文字列を取得できます。

于 2012-05-10T08:45:03.243 に答える
0

私が正しく理解している場合は、文字列を部分文字列に分割するために、区切り文字を使用する必要があります。たとえば、「one#two#three」は 1 つ 2 つ 3 に分割されます。もしそうなら:

#include <stdio.h>
#include <string.h>
int main()
{
    char test[] = "one#two#three";
    char* res;
    res = strtok(test, "#");
    while(res) {
        printf("%s\n", res);
        res = strtok(NULL, "#");
    }

    return 0;
}

トークン化する文字列で strtok() を 1 回呼び出します。最初の呼び出しからの文字列を続行するには、次の各呼び出しで NULL を渡す必要があります。また、strtok は元のポインターを変更する可能性があるため、動的に割り当てられる場合は、strtok に渡す前に保存する必要があることに注意してください。

于 2012-05-10T08:31:33.950 に答える