表从第1行开始,而不是在第0行

时间:2016-01-05 11:58:43

标签: c

该函数搜索表中最长/最短的字符串。我可以对其进行编码和读取,但只要我输入函数void minmax(char *ptab, char **pva, int n),它就会跳转到第1行而不是第0行。因此,第一个line[0]永远不会被读取。

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

int encodage(char [][50]);
void affichage(char [][50],int);
void minmax (char *,char **,int);

int main()
{   
    char tab[50][50];
    char *va[2];
    int n;
    n=encodage(tab);
    affichage(tab,n);
    minmax(&tab[0][50],va,n-1);
    printf("\nTest\n");
    puts(*va);
    fflush(stdin);
    puts(*(va+1));
    return 0;
}

//Code and Read the table with the encodage and affichage.

void minmax(char *ptab,char **pva,int n)
{
    int i;
    *pva=ptab;
    *(pva+1)=ptab;
    ptab=ptab+50;
    for(i=1;i<n-1;i++)
    {
        if(strlen(ptab)>strlen(*(pva+1)))
        {
            *(pva+1)=ptab;
        }
        else
        {
            if(strlen(ptab)<strlen(*(pva)))
            {
                *(pva)=ptab;
            }
        }
        ptab=ptab+50;
    }
}

1 个答案:

答案 0 :(得分:0)

tab [0] [50]表示tab [0]中索引为50的元素,而不是tab [0]本身。除此之外,指数50超出范围。如果您喜欢使用printf("%s", ... );

来打印字符串
void minmax (char[][50] ,char **,int);

int main()
{
    char tab[50][50];
    char *va[2];
    int n = encodage( tab );
    affichage( tab, n );
    minmax( tab, va, n ); // <-
    printf( "short %s\n", va[0] );
    printf( "long  %s\n", va[1] );
    return 0;
}

如果您想找到最短和最长的字符串,请按以下步骤操作:

您的第一个参数是指向字符串表格的指针。第二个是指向两个结果字符串的指针,第三个是表格中的字符串数量(不是n-1或其他)。

void minmax(char ptab[][50], char **pva, int n )
              //     ^^^^^^
{
    int i, len0, len1, len;
    pva[0]=ptab[0];              // init shortest string with pointer to first string in table
    pva[1]=ptab[0];              // init longest string with pointer to first string in
    len0 = strlen( pva[0] );     // remember lenght of shortest string
    len1 = len0;                 // remember lenght of longest string
    for(i=1;i<n;i++)             // iterate from secend string up to last string (1..49 in your case)
    {
        len = strlen( ptab[i] ); // get length of string with index i
        if( len > len1 )         // if lenght is greater than lenght of longest string, then this is longest string
        {
            len1 = len;          // remember new maximum lenght
            pva[1]=ptab[i];      // remember new maximum string
        }
        else if( len < len0 )    // if lenght is less than lenght of shortest string, then this is shortest string
        {
            len0 = len;          // remember new minimum length
            pva[0]=ptab[i];      // remember new minimum string
        }
    }
}