数组越界,段错误是什么鬼?

在写一道单词单词个数统计的题时,运行出来这样一个错误

下面是源码

#include<stdio.h>
int fun(char* s)
{
	int i, j=0;
	for (i = 0; s[i] != '\0'; i++)
	{
		if (s[i] != ' ' && (s[i + 1] == ' ' || s[i + 1] == '\0'))
		{
			j++;
		}
	}
	return j;
}
int main()
{
	int t = 0;
	char s[100];
	gets(s);
	t = fun(s);
	printf("%d", t);
	return 0;
	
}

下面是运行结果

接下来是错误

这怎么解决呀?

修改如下: 

#include<stdio.h>
int fun(char* s)
{
	int i, j=0;
	for (i = 0; s[i] != '\0'; i++)
	{
		if (s[i] != ' ')
		{
			j++;
		}
	}
	return j;
}
int main()
{
	int t = 0;
	char s[100];
	gets(s);
	t = fun(s);
	printf("%d", t);
	return 0;
	
}

 

char s[100]改成char s[100] = {0};试试

s[i] != '\0'不能保证循环体内的s[i+1]不等于'\0'

 

#include<stdio.h>
#include <ctype.h>  //for isspace()
int fun(char* s)
{
	int i, j=0;

    i = 0;
    while (s[i]) {  //remove space at head
        if (!isspace(s[i]))
            break;
        i++;
    }

	//for (i = 0; s[i] != '\0'; i++)
	for (; s[i] != '\0'; i++)
	{
        /*
		if (s[i] != ' ' && (s[i + 1] == ' ' || s[i + 1] == '\0'))
		{
			j++;
		}
        */
        if (isspace(s[i]) && (i > 0 && !isspace(s[i-1])))
            j++;
	}

	return j;
}
int main()
{
	int t = 0;
	char s[100];
	fgets(s, 100, stdin);
	t = fun(s);
	printf("%d", t);
	return 0;

}

供参考~

 

循环里改成判断字符串长度,就可以了:

#include<stdio.h>
#include<string.h>
int fun(char* s)
{
	int i, j=0;
	for (i = 0; i< strlen(s);i++)//s[i] != '\0'; i++)
	{
		if (s[i] != ' ' && (s[i + 1] == ' ' || s[i + 1] == '\0'))
		{
			j++;
		}
	}
	return j;
}
int main()
{
	int t = 0;
	char s[100];
	gets(s);
	t = fun(s);
	printf("%d", t);
       
	return 0;
}