我在main中使用char *s
时出现分段错误。如果我使用char s[100]
或类似的东西,一切都很好。为什么?SIGSEGV 出现在我根据指令char *token = strtok(s, delim);
在线调用find_short(char *s)
函数时。这是我的代码:
#include <sys/types.h>
#include <string.h>
#include <limits.h>
#include <stdio.h>
int find_short(char *s)
{
int min = INT_MAX;
const char delim[2] = " ";
char *token = strtok(s, delim);
while(token != NULL) {
int len = (int)strlen(token);
if (min > len)
min = len;
token = strtok(NULL, delim);
}
return min;
}
int main()
{
char *s = "lel qwew dasdqew";
printf("%d",find_short(s));
return 0;
}
行:
char *s = "lel qwew dasdqew";
创建指向内存中常量字符串的指针。
由于该字符串是常量,因此无法更改其内容。strtok
函数将尝试通过在标记分隔符位置插入