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 回答