#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开始尝试一些事情。我试图创建的程序的一部分涉及必须分隔字符串。上面的代码是我试图弄清楚如何做到这一点。但是,我在尝试运行时遇到了分段错误,但我不知道为什么。我认为这是因为我在这里做了一些错误的指针,任何帮助都会很棒
它与我定义日,月,年指针的方式有关吗?
答案 0 :(得分:3)
strtok
在解析字符串时修改字符串。
但是您使用"26/02/1992"
创建了一个常量的文字字符串,因此无法修改
(它是程序中内置的只读数据)。
要停止seg-fault,您需要在内存中创建一个字符串的副本,您可以在其中修改它。 strdup
(字符串重复)是一个很好的函数,但是当你完成它时你需要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.