C 给定一个字符串,将其子字符串存储在二维数组中

C 给定一个字符串,将其子字符串存储在二维数组中,c,C,我被要求编写一个程序,给定字符串acmprog,我应该生成并排序一组子字符串 这是我的代码: void gen_subStrings(char a[],char sub[][100],int len){ int i,count=2; char first=a[0]; printf("%c",first); for(i=0;i<len-2;i++){ strncpy(sub[i],a,count); printf("%s\n",

我被要求编写一个程序,给定字符串acmprog,我应该生成并排序一组子字符串

这是我的代码:

void gen_subStrings(char a[],char sub[][100],int len){
    int i,count=2;
    char first=a[0];
    printf("%c",first);
    for(i=0;i<len-2;i++){
        strncpy(sub[i],a,count);
        printf("%s\n",sub[i]);
        count++;
    }
}

main(){
    char string[]={"acmprog"};

    int len = sizeof(string);
    char subStrings[len][100];

    gen_subStrings(string,subStrings,len);

    system("pause");
}
何时应该:

a
ac
acm
acmp
acmpr
acmpro
acmprog

我做错了什么?

每次在字符串末尾都必须复制NULL

试试下面的方法

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define Literal "acmprog"

void gen_subStrings( const char s[], size_t n, char sub[][n] )
{
    size_t i = 0;
    for ( ; i + 1  < n; i++ )
    {
        strncpy( sub[i], s, i + 1 );
        sub[i][i+1] = '\0';
    }

    sub[i][0] = '\0';
}

int main( void ) 
{
    char string[] = "acmprog";
    size_t n = sizeof( string );

    char subStrings[n][n];

    gen_subStrings( string, n, subStrings );



    for( size_t i = 0; subStrings[i][0] != '\0'; i++ ) 
    {
        printf( "%s\n", subStrings[i] );
    }

    system( "pause" );

    return 0;
}

我差点忘了空的。难怪我的输出中有额外的随机字符。非常感谢。
 for(i=0;i<len-2;i++)
 {
    strncpy(sub[j],a,count); //Use a different variable
    sub[j][count]='\0';// at end , copy NULL
    printf("%s\n",sub[j++]);
    count++;
 }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define Literal "acmprog"

void gen_subStrings( const char s[], size_t n, char sub[][n] )
{
    size_t i = 0;
    for ( ; i + 1  < n; i++ )
    {
        strncpy( sub[i], s, i + 1 );
        sub[i][i+1] = '\0';
    }

    sub[i][0] = '\0';
}

int main( void ) 
{
    char string[] = "acmprog";
    size_t n = sizeof( string );

    char subStrings[n][n];

    gen_subStrings( string, n, subStrings );



    for( size_t i = 0; subStrings[i][0] != '\0'; i++ ) 
    {
        printf( "%s\n", subStrings[i] );
    }

    system( "pause" );

    return 0;
}
a
ac
acm
acmp
acmpr
acmpro
acmprog