【发布时间】:2020-07-16 15:45:17
【问题描述】:
我尝试使用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)
strtok 来自man 页面:char *strtok(char *str, const char *delim);
请帮助理解这个问题。
【问题讨论】:
标签: c arrays string pointers strtok