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

int main(){
    char *p = "26/02/1992";


    char *day;
    char *month;
    char *year;

    const char *delimiters = "/";

    day = strtok(p, delimiters);
    month = strtok (NULL, delimiters);
    year = strtok (NULL, delimiters);

    printf("%s  %s  %s\n", day, month, year);

    return 0;
}

ねえ、私はちょうど C から始めて、いくつかのことを試しています。私が作成しようとしているプログラムの一部には、文字列を区切る必要があります。上記のコードは、その方法を理解しようとしている私です。しかし、これを実行しようとするとセグメンテーション違反が発生し続けますが、その理由はわかりません。ここでポインターに何か間違ったことをしたためだと思います。どんな助けも素晴らしいでしょう

日、月、年のポインターを定義した方法に関連していますか?

4

1 に答える 1

3

strtok文字列を解析しながら変更します。

ただし、定数のリテラル文字列を で作成した"26/02/1992"ため、変更できません。
(これは、プログラムに組み込まれた読み取り専用のデータです)。

seg-fault を停止するには、メモリ内に文字列のコピーを作成し、変更できるようにする必要があります。 strdup(String Duplicate) はこれに適した関数ですが、使い終わったらfreeメモリが必要になります。

char *p = strdup("26/02/1992");  // Make a copy of the literal string, but a copy you can modify.

[... do all your work  ...]

free(p);  // Free up your copy of the string.
于 2013-10-04T20:34:33.880 に答える