4

strtok()スペースで区切られた文字列を解析するために使用しようとしています。私が知る限り、正しく使用していますが、ideone.com では動作しません。次のコードに何か問題がありますか? 私はただ得るRuntime error time: 0 memory: 2288 signal:11

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

static void test(char *command)
{
    char* output = strtok(command, " ");
    printf("%s\n", output);
}

int main(void) {

    test("set_rate 200");

    return 0;
}

試してみたい場合は、ideone.com にアクセスしてください

4

4 に答える 4

4

常にman最初にページを参照してください。

strtok(3)言います:

これらの機能を使用するときは注意してください。それらを使用する場合は、次の点に注意してください。

  • これらの関数は、最初の引数を変更します。

  • これらの関数は、定数文字列では使用できません。

于 2013-10-08T04:48:54.453 に答える
3

文字列を変更するためstrtok、文字列が読み取り専用メモリにないことが必要です。したがって、文字列リテラルをテスト関数に渡すと、クラッシュします。

これの方が良い:

char s[] = "set_rate 200";
test(s);
于 2013-10-08T04:45:44.480 に答える
3

strtok最初のパラメーターとして渡された文字列を変更するため、文字列リテラルを渡すことはできません。次のmainように変更します。

int main(void) {  
    char str[] = "set_rate 200";
    test(str);
    return 0;
}

strこれはchar配列ですが、文字列リテラルではありません。

于 2013-10-08T04:45:57.720 に答える