#include <stdio.h>
int main()
{
char * tmp = "0.1";
char * first = strtok(tmp, ".");
return 0;
}
编辑:
#include <stdio.h>
int main()
{
char tmp[] = "0.1";
char *first = strtok(tmp, ".");
char *second = strtok(tmp, "."); // Yes, should be NULL
printf("%s\n", first);
printf("Hello World\n");
return 0;
}
这个段错误可以在在线gdb中重现,网址如下: https://www.onlinegdb.com/online_c_compiler
char * tmp = "0.1";
会让编译器将字符串写入可执行文件中,无法在运行时修改。而char tmp[] = "0.1";
则会将字符串推入堆栈中,可以在运行时进行修改。 - RayaneCTXtmp []
,仍然存在问题。第一个strtok
将在原地修改tmp
并将其留为空。因此,第二个strtok
将获得0
而不是您想要的1
(因为它看到的是0
而不是原始的0.1
)。您需要执行以下操作:second = strtok(NULL,“。”)
以获取1
。 - Craig Estey