2D字符串数组的最后一个元素覆盖以前的数组元素

时间:2017-12-19 06:31:49

标签: c arrays string pointers

void read_char_from_file(FILE *fp, int formatted)
{
    char sChar[16], eol;
    int col=0, row=0,ind=0,count=0;
    char *str2D[4][4]={{ "NULL" }};
    while ( (fscanf(fp, "%s%c", sChar,&eol)) != EOF)
    {
        if(eol!='\n')
        {
            str2D[row][col]=sChar;
            printf("Row: %d, Col: %d = %s\n",row, col,str2D[row][col]);
            col++;
        }
        else {
            str2D[row][col]=sChar;
            printf("Row: %d, Col: %d = %s\n",row, col,str2D[row][col]);
            row++;
            col=0;
        }
        str2D[row][col]=0;
    }

    int i,j;
    for (i=0; i < 3; i++)
    {
        for(j=0; j <3; j++)
        printf("%s",str2D[i][j]);
    }

}

上面的代码显示str2D的最后一个元素,覆盖了所有以前的数组内容。我需要将sChar复制到2-D字符串数组。

1 个答案:

答案 0 :(得分:0)

简答:

将内容复制到 str2D[row][col]指向的内存位置,您只需将指针指向sChar 。因此,正在显示sChar的最新内容。

答案很长:

您还有其他问题。首先,

  • {{ "NULL" }};{{ NULL }};
  • 不同
  • 您正在创建一个二维指针数组。在将指针指向的内存位置中存储任何内容之前,您需要确保它们指向某些有效位置。