for循环未考虑执行的最后一个循环

时间:2019-01-06 05:47:39

标签: c multidimensional-array c-strings

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
        int count;
        scanf("%d",&count);
        char **array;
        array = (char **) malloc(sizeof(char* ) * count);
        for(int i=0;i<count;i++)
        {
                *(array +i) = (char *)malloc(sizeof(char) * 1000);
        }
        for(int i=0;i<count;i++)
        {
                fgets(*(array + i) , 1000 , stdin);
        }

        for(int i=0;i<count;i++)
        {
                printf("%s:::",*(array+i));
        }
        printf("\n");
        return 0;

} 

我试图用count元素创建一个字符串数组。我使用fgets函数使用for循环将元素读入数组。 但是,当我尝试打印元素时,std输出中缺少最后一个元素。 我尝试使用count = 8;

  1. 1
  2. 2
  3. 309876567
  4. 67564746
  5. 111
  6. 20043
  7. 75647
  8. 200

这些是我的投入。 但是不会打印200。

1 个答案:

答案 0 :(得分:0)

尝试使用此版本,注释中解决了问题。

int main(void) {
        int row, col /* 1000 */;
        scanf("%d%d",&row, &col);
        getchar();/* to clear stdin buffer */
        char **array = malloc(sizeof(char*) * row);
        for(int i=0;i < row; i++) {
                /* allocate memory */
                *(array +i) = malloc(sizeof(char) * col);
                /* scan the data */
                fgets(*(array + i), col, stdin); /* fgets add \n at the end of buffer if read */
                array[i][strcspn(array[i], "\n")] = 0; /* remove trailing \n */
                /* print it */
                printf("%s\n",*(array+i));
        }
        printf("\n");
        /* free dynamically allocated memory @TODO */
        return 0;
}