strlen如何使用以及请帮我解解题目

img

C++,codeblocks
如图第四题,定义并用cin>>输入了一个字符数组ch1,但是后续在使用strlen(ch1);return l;(l是之前定义过的字符串长度)的时候报错显示has no effect是为什么
以及请帮帮我,连接后的字符长度一样的时候如何判断连接的单词数?

代码如下,如有帮助,请帮忙采纳一下,谢谢。

img

#include <iostream>
#include <string>
using namespace std;

struct stnode
{
    char buf[100];
    int cnt;
};

int main()
{
    char s[10][11];
    stnode node[10];
    char tmp[12];
    int nmb =0;
    
    int k = 0,i,j;
    
    while(1)
    {
        cin >> s[nmb];
        nmb++;
        if(cin.get() == '\n')break;
    }
    //按字符长度排序
    for ( i=0;i<nmb-1;i++)
    {
        for ( j =  0;j<nmb-i-1;j++)
        {
            if(strlen(s[j]) > strlen(s[j+1]))
            {
                memset(tmp,0,sizeof(tmp));
                memcpy(tmp,s[j],strlen(s[j]));
                memset(s[j],0,sizeof(s[j]));
                memcpy(s[j],s[j+1],strlen(s[j+1]));
                memset(s[j+1],0,sizeof(s[j+1]));
                memcpy(s[j+1],tmp,strlen(tmp));
            }
        }
    }
    memset(node[0].buf,0,101);
    memcpy(node[0].buf,s[0],strlen(s[0]));
    node[0].cnt = 1;
    i=1;
    k = 0;
    while(i<nmb)
    {
        if(strlen(s[i]) == strlen(s[i-1]))
        {
            memcpy(node[k].buf+strlen(node[k].buf),s[i],strlen(s[i]));
            node[k].cnt +=1;
        }
        else
        {
            k++;
            memset(node[k].buf,0,101);
            memcpy(node[k].buf+strlen(node[k].buf),s[i],strlen(s[i]));
            node[k].cnt =1;
        }
        i++;
    }
    
    //对拼接后的字符排序
    for ( i = 0;i<k;i++)
    {
        for( j = 0;j<k-i;j++)
        {
            if (strlen(node[j].buf) > strlen(node[j+1].buf) )
            {
                stnode tt = node[j];
                node[j] = node[j+1];
                node[j+1] = tt;
            }else if (strlen(node[j].buf) > strlen(node[j+1].buf))
            {
                if(node[j].cnt < node[j+1].cnt)
                {
                    stnode tt = node[j];
                    node[j] = node[j+1];
                    node[j+1] = tt;
                }
            }
        }
    }

    //cout << "Output: ";
    for ( i = 0;i<=k;i++)
    {
        cout << node[i].buf << " ";
    }
    return 0;
}

你应该先将数组初始化为0,比如
char str[100] = {0};