写一个程序,其命令行包括一个字符参数s,运行中由标准输入读入一系列正文,该程序把所有行依次输出,并在那些包含字符串s的行前面标一个星号。

问题遇到的现象和发生背景

(命令行参数)写一个程序,其命令行包括一个字符参数s,运行中由标准输入读入一系列正文,该程序把所有行依次输出,并在那些包含字符串s的行前面标一个星号。
提示:可使用系统函数 strstr(str*, substr*),它判断一个字符串substr是否为另一个字符串str的子串。

用代码块功能插入代码,请勿粘贴截图
#include
#include
int main()
{
    char s;
    int i = 0;
    char a[100][100];
    scanf_s("%c",&s);
    while (scanf_s("%s",a[i]) != EOF)
    {
        i++;
    }
    int len[100], count = 0;
    for (int j = 0; j < i; j++)
    {
        len[j] = strlen(a[j]);
    }
    for (int j = 0; j < i; j++)
    {
        count = 0;
        for (int k = 0; k < len[j]; k++)
        {
            if (a[j][k] == s)
            {count++;
                
            }
        }
        if (count > 0)
        {
            for (int o = 0; o < len[j]; o++)
            {
                a[j][o + 1] = a[j][o];
                a[j][len[j] + 1] = "\0";
                a[j][0] = "*";
            }
        }
    }
    for (int j = 0; j < i; j++)
    {
        puts(a[j]);
    }
}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

我觉得写的没有问题,为什么会报错呢

改动处见注释,供参考:

#include<stdio.h>
#include<string.h>
int main()
{
    char s;
    int i = 0;
    char a[100][100];
    scanf_s("%c", &s, 1);   //修改
    while (scanf_s("%s", a[i], 100) != EOF) //修改
    {
        i++;
    }
    int len[100], count = 0;
    for (int j = 0; j < i; j++)
    {
        len[j] = strlen(a[j]);
    }
    for (int j = 0; j < i; j++)
    {
        count = 0;
        for (int k = 0; k < len[j]; k++)
        {
            if (a[j][k] == s)
            {
                count++;
            }
        }
        if (count > 0)
        {
            for (int o = len[j]; o > 0; o--)
                //for (int o = 0; o < len[j]; o++) 修改
            {
                a[j][o] = a[j][o - 1];//a[j][o + 1] = a[j][o]; 修改
            }
            a[j][0] = '*';           //a[j][0] = " * ";  修改
            a[j][len[j] + 1] = '\0'; //a[j][len[j] + 1] = "\0";    修改    
        }
    }
    for (int j = 0; j < i; j++)
    {
        puts(a[j]);
    }
}