我尝试使用
如果我将字符串初始化为
问题在于其他函数,
下面是完整的代码:
strtok
函数来分割字符串。但是,如果我将字符指针作为此函数的参数,则程序会失败。如果我将字符串初始化为
s2
或s3
,程序可以正常工作。但如果我使用字符指针s1
,程序会出现Segmentation fault (core dumped)
错误。char *s1 = "1A 2B 3C 4D";
char s2[] = "1A 2B 3C 4D";
char s3[20] = "1A 2B 3C 4D";
问题在于其他函数,
printf
和 strlen
没有问题,但是只有 strtok
函数出现错误。下面是完整的代码:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
void split_string(char *s) {
char * token = strtok(s," ");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, " ");
}
}
int main()
{
char *s1 = "1A 2B 3C 4D";
char s2[] = "1A 2B 3C 4D";
char s3[20] = "1A 2B 3C 4D";
printf("size of s1 = %ld, s2 = %ld, s3 = %ld\n", strlen(s1), strlen(s2), strlen(s3));
printf("s1: %s\ns2: %s\ns3: %s\n",s1,s2,s3);
printf("split s2: \n");
split_string(s2);
printf("split s3: \n");
split_string(s3);
printf("split s1: \n");
split_string(s1);
return 0;
}
运行后的结果:
size of s1 = 11, s2 = 11, s3 = 11
s1: 1A 2B 3C 4D
s2: 1A 2B 3C 4D
s3: 1A 2B 3C 4D
split s2:
1A
2B
3C
4D
split s3:
1A
2B
3C
4D
split s1:
Segmentation fault (core dumped)
man
页面上的strtok
函数: char *strtok(char *str, const char *delim);
请帮忙理解这个问题。