2

这对我来说是一个非常有趣的错误,因为实际上一小时前这段代码运行良好,但现在不行了。

基本上发生的事情是下一行的第一个“块”的第一个字符被附加为最后一个“块”的最后一个字符

其中“块”是指该行/列中保存的字符串。

例如,假设数组应该是

1,2,3,Hello
4,5,6,Wonder

它被读为

1,2,3,Hello4,
6,Wonder, , 

这是我一直在使用的逻辑。我真的不知道发生了什么变化,所以任何建议都会很好。

tableFile = fopen(argv[4], "r");


//pulling the table data from the file
char tableArray[30][50][256];
char c;
int i=0, j=0, k=0;
while(c != EOF){

    c = fgetc(tableFile);

    switch(c)
    {
        case ',':
            tableArray[i][j++][k]='\0';
            k=0;
            break;
        case '\n':
            tableArray[i++][j][k]='\0';
            j=0;
            k=0;
            break;
        case '\r':
            break;
        case EOF:
            break;
        default:
            tableArray[i][j][k++] = c;
            break;
    }

} //end file transfer

//Just to display, ignore magic numbers as (mostly) irrelevant
int a, b;

for (a = 0; a < 20; a++)
{
    for (b = 0; b < 47; b++)
    {
        printf ("%s", tableArray[a][b]);
        if (b<46)
            printf (", ");

    }
    printf ("\n");
}

fclose(tableFile);
4

2 回答 2

1
  1. 你没有初始化你的数组。不保证零填充。添加

    memset(tableArray, 0, sizeof(tableArray))

  2. case EOF:NULL必须在最近的字符串中添加一个终止符。

于 2012-10-02T18:39:31.773 回答
0

这真的是由于我原来的帖子下面的评论。但是,尽管它是令人作呕和糟糕的编码形式......这就是始终如一地解决它的原因,而不是我为此感到自豪......并且仍然对想法持开放态度:

tableFile = fopen(argv[4], "r");

//pulling the table data from the file, lazy magic numbers here... 
char tableArray[30][50][256];
char c;
int i=0, j=0, k=0;

memset(tableArray, 0, sizeof(tableArray));
while(c != EOF){

    c = fgetc(tableFile);

    switch(c)
    {
        case ',':
            tableArray[i][j++][k]='\0';
            k=0;
            break;
        case '\n':
            tableArray[i++][j][k]='\0';
            j=0;
            k=0;
            break;
        case '\r':
            tableArray[i++][j][k]='\0';
            j=0;
            k=0;
            break;
        case EOF:
            tableArray[i][j][k] = '\0';
            break;
        default:
            tableArray[i][j][k++] = c;
            break;
    }

} //end file transfer

/* //Only relevant for displaying the tableArray
int a, b;

for (a = 0; a < 20; a++)
{
    for (b = 0; b < 47; b++)
    {
        printf ("%s", tableArray[a][b]);
        if (b<46)
            printf (", ");

    }
    printf ("\n");
}
 */

fclose(tableFile);
于 2012-10-03T00:08:07.577 回答