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

问题描述 投票:0回答:1
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字符串数组。

c arrays string pointers
1个回答
0
投票

简答:

你没有将内容复制到str2D[row][col]指向的内存位置,你只是将指针指向sChar。因此,正在展示sChar的最新内容。

答案很长:

你还有其他问题。第一,

  • {{ "NULL" }};{{ NULL }};不同
  • 您正在创建一个2-D指针数组。在将指针指向的内存位置中存储任何内容之前,需要确保它们指向某些有效位置。
© www.soinside.com 2019 - 2024. All rights reserved.